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 :

Supprimer la ligne i-1


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut Supprimer la ligne i-1
    Bonjour à tous,

    je fais un script de parsing dans lequel j'omets une ligne selon une condition, le problème est que j'aimerai omettre la ligne respectant cette condition ainsi que la ligne qui la précède.

    Voici comment je procède:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i,ligne in enumerate(lecture_de_test.readlines()):
    		ligne = ligne.strip('\n')
     
    		if ligne[0]!='>' and len(ligne) < 5:
    			continue
    		else:
    			test2.write(ligne+'\n')

    Auriez vous une solution pour ne pas écrire la ligne respectant la condition ainsi que la ligne d'avant ?

    Merci à vous

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut
    Si jamais ça intérèsse quelqu'un je pense avoir résolu le problême en procédant ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	LISTE = []
    	for i,ligne in enumerate(lecture_de_test.readlines()):
    		ligne = ligne.strip('\n')
     
     
    		if ligne[0]!='>' and len(ligne) < 5:
    			LISTE.pop()
     
    		else:
    			LISTE.append(ligne)
    			#test2.write(ligne+'\n')
    	for i in LISTE:
    		test2.write(i + '\n')

    Je stock mes lignes dans une liste en retirant le dernier element ajouté lorsque je retrouve ma condition, puis je réecris tous les élements de ma liste.

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    txt = []
    lines = lecture_de_test.readlines()
    for i, line in enumerate(lines):
        txt.append(line)
        line = line.strip('\n')
     
        if line[0]!='>' and len(line) < 5:
    	txt = txt[:-2]
     
    text = "".join(txt)
     
    ... write ...
    pas testé.


    Edit: Nous nous comprenons, je vois.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut
    merci VinsS

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Il faut faire attention aux conditions aux limites: que se passe-t-il si la liste de ligne ne contient que 0, 1 ou 2 items?
    Si on ne s'intéresse qu'à deux lignes inutile de les stocker toutes, la dernière suffit.

    Après il faut peut être reformuler le test:
    if ligne[0]!='>' and len(ligne) < 5: *** ignore **
    équivaut à:
    if ligne[0] == '>' or len(ligne) >= 5: ** print last **

    Ce qui devrait donner (à tester)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        lines = lecture_de_test.splitlines()
        assert len(lines) > 1
        last = lines[0]
        for x, line in enumerate(lines[1:]):
           if line[0] == '>' and len(line) >= 5:
              test2.write( last + '\n')
           last = line
        test2.write( last + '\n')
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut
    Bonjour wiztricks,

    merci pour vos suggestions je n'y avais pas pensé, de plus je viens de m'apercevois que lorsque j'appliquais plusieurs fois mon script sur le même fichier je perdrais des informations alors que la condition était fausse

    Je vais étudier votre code attentivement merci

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par michel42 Voir le message
    merci pour vos suggestions je n'y avais pas pensé, de plus je viens de m'apercevois que lorsque j'appliquais plusieurs fois mon script sur le même fichier je perdrais des informations alors que la condition était fausse
    L'intérêt de mon script(s'il en est) est de proposer une autre approche.
    Ne m'en voulez pas si je n'ai pas passé plus de temps que çà à le tester...

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

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

Discussions similaires

  1. [JTable] Supprimer une ligne d'un jtable
    Par Orionmel dans le forum Composants
    Réponses: 5
    Dernier message: 05/11/2004, 22h29
  2. Shell pour supprimer des lignes d'un fichier
    Par nelsa dans le forum Autres langages
    Réponses: 2
    Dernier message: 20/09/2004, 12h26
  3. [C#] Comment supprimer une ligne dans DataGrid ?
    Par BAUDIER dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/07/2004, 16h03
  4. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 11h24
  5. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30

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