IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

affichage lignes contenant plusieurs caractères d'une chaine


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    rs
    Inscrit en
    Novembre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : rs

    Informations forums :
    Inscription : Novembre 2016
    Messages : 15
    Points : 10
    Points
    10
    Par défaut affichage lignes contenant plusieurs caractères d'une chaine
    Bonjour,

    Je ne parviens pas à partir d'un fichier à générer un autre fichier contenant uniquement les lignes avec abc1 ET def. Ici il m'affiche les lignes avec abc1, def et abc1 + def

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fichier = r"test.txt"
    fichiersortie = r"text-select.txt"
    chaines = ["abc1", "def"]
     
    with open(fichier,'r') as fi:
        with open(fichiersortie,'w') as fs:
            for ligne in fi:
            	for carac in chaines: 
            		if carac in ligne:
            			fs.write(ligne)


    Autre question : comment faire un count des lignes contenant les 2 items de 'chaines' dans un autre fichier?
    for line in fs:
    if line[0]!=0:
    i+=1
    ca ne fonctionne pas...

    Merci beaucoup

  2. #2
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut
    Python fait ce que vous lui demandez :

    prend chaque élément puis vérifie s'il est dans la ligne
    C'est votre algorithme qui est faux.

    Idée non testée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    fichier = r"test.txt"
    fichiersortie = r"text-select.txt"
    chaines = ["abc1", "def"]
     
    saver = []
     
    with open(fichier,'r') as fi:
        for line in fi:
            if all([m in e for m in mask]):
                saver.append(line)
     
    print("Le fichier contient {0} lignes avec {1} ET {2}".format(len(saver), chaine[0], chaine[1]) 
     
    with open(fichiersortie,'w') as fs:
        for elem in saver:
            fs.write(elem)

    Prière de mettre vos données ou au moins un subset pour qu'on teste.

  3. #3
    Membre à l'essai
    Homme Profil pro
    rs
    Inscrit en
    Novembre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : rs

    Informations forums :
    Inscription : Novembre 2016
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour ta réponse, malheureusement je n'arrive pas à faire fonctionner correctement ton code

    voici un échantillon de données (le fichier de base est volumineux) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    abc1	def	ghi
    abc	def	
    ghi	def	xyz	mno3
    xyz	abc2	def
    ghi	def	xyz	mno3
    jkl	abc2	def
    ghi	def	xyz	abc2	def4
    mno	abc1	def	xyz	def
    seule la première et dernière ligne doivent être sélectionnées dans cet exemple

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par nmartin Voir le message
    Merci beaucoup pour ta réponse, malheureusement je n'arrive pas à faire fonctionner correctement ton code
    Une idée non testée reste une idée à comprendre et à essayer d'adapter pas une solution toute faite pour vous dispenser de réfléchir à l'algo. ou à comment le coder.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut
    Remplace les lignes correspondantes par celles-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    with open(fichier,'r') as fi:
        for line in fi:
            if all([m in line for m in chaines]):
                saver.append(line)
     
    print("Le fichier contient {0} lignes avec {1} ET {2}".format(len(saver), chaines[0], chaines[1])) 
     
    with open(fichiersortie,'w') as fs:
        for elem in saver:
            fs.write(elem)
    Donnes le fichier txt la prochaine fois. Ca m'évitera de devoir le recréer.

  6. #6
    Membre à l'essai
    Homme Profil pro
    rs
    Inscrit en
    Novembre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : rs

    Informations forums :
    Inscription : Novembre 2016
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    merci pour ta réponse et pour la stratégie a appliquer de manière générale

  7. #7
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Supernul Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open(fichiersortie,'w') as fs:
       for elem in saver:
          fs.write(elem)
    voire même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open(fichiersortie, 'w') as fs:
       fs.write(''.join(saver))

  8. #8
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut
    @BufferBob : c'est beaucoup plus joli comme ça. Il faut que j'ajoute la comparaison de ces deux codes dans mes benchmarks.

  9. #9
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Supernul Voir le message
    @BufferBob : c'est beaucoup plus joli comme ça.
    c'est surtout que dans un cas on fait autant d'appels système write qu'il y a de lignes, dans l'autre on concatène en mémoire et on écrit ensuite l'intégralité des données en une seule fois, sur des fichiers un peu conséquents la différence se fera vite sentir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/04/2013, 11h16
  2. Réponses: 4
    Dernier message: 21/07/2009, 14h08
  3. Réponses: 31
    Dernier message: 20/05/2009, 11h12
  4. Affichage des caractères d'une chaine
    Par sound-concept dans le forum C
    Réponses: 1
    Dernier message: 04/10/2007, 10h24
  5. Réponses: 1
    Dernier message: 22/01/2007, 20h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo