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 :

extraction de lignes d'un fichier


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Points : 53
    Points
    53
    Par défaut extraction de lignes d'un fichier
    Bonjour tout le monde,

    Je cherche à lire un fichier scientifique avec deux types d'informations répétitives pour chaque element i:

    element=element_i
    1,2,3
    5,9,8
    ....
    ....
    load_element_i, definition1
    definition2
    defintion3


    Une fois arrivée au mot load_element_i, je voudrais supprimer la ligne ou il se trouve et les 2 autres lignes qui suivent.

    Je n'arrive pas à formuler une condition suffisante pour réussir mon but, et je n'ai plus touché le python depuis un bail!

    Si vous avez une idée de comment faire, je vous en serai reconnaissante!

    Merci.

    M.

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Tu peux le traiter ligne par ligne.

    Exemple:
    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
     
    outlines = []
    count = 0
    with open('myfile', 'r') as objf:
        lines = objf.readlines()
        while count < len(lines) - 1:
            if lines[count].startswith('load_element_'):
                count += 3
            else:
                outlines.append(lines[count])
                count += 1
     
    with open('myfile', 'w') as objf:
        for line in outlines:
            objf.write(line)
    Pas testé.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Il y a même moyen de faire ça sans lire tout le fichier d’un coup (important s’il est imposant) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with open('infile', 'r') as inf, open('outfile', 'w') as outf:
        decr = 0
        for l in inf:
            if decr:
                decr -= 1
            elif l.startswith("load_element_"):
                decr = 2
            else:
                outf.write(l + '\n')
    code py3, pas testé non plus (mais je doute qu’il pose problème :p ).

    À noter, ce code écrit dans un nouveau fichier, si on veut écraser le contenu du même fichier, soit on fait comme proposé par VinS (stockage des lignes dans une liste temporaire –*mais on retrouve le même problème de mémoire avec les gros fichiers)*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    outl = []
    with open('myfile', 'r') as inf:
        decr = 0
        for l in inf:
            if decr:
                decr -= 1
            elif l.startswith("load_element_"):
                decr = 2
            else:
                outl.append(l)
     
    with open('myfile', 'w') as outf:
        outf.write('\n'.join(outl))
    … Soit on utilise un fichier de sortie temporaire, puis on efface l’original et renomme le temporaire (plus adapté avec de gros fichiers)*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    with open('infile', 'r') as inf, open('outfile', 'w') as outf:
        decr = 0
        for l in inf:
            if decr:
                decr -= 1
            elif l.startswith("load_element_"):
                decr = 2
            else:
                outf.write(l + '\n')
     
    import os
    os.remove("infile")
    os.rename("outfile", "infile")

Discussions similaires

  1. Extraction de lignes dans un fichier
    Par fredorly dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 07/07/2014, 14h49
  2. Extraction des lignes d'un fichier txt dans un tableau
    Par med.ben235 dans le forum Débuter
    Réponses: 1
    Dernier message: 28/04/2014, 17h56
  3. Extraction des lignes d'un fichier sous forme de chaine
    Par rahalfat10 dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2009, 15h40
  4. Extraction de ligne d'un fichier
    Par Stormbringer dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 08/04/2008, 20h05
  5. extraction d'une ligne d'un fichier txt
    Par tim69000 dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 19/01/2006, 15h28

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