Comment lire uniquement les lignes d'un fichier texte après une certaine chaîne?


Brian Zelip

Je voudrais lire dans un dictionnaire toutes les lignes d'un fichier texte qui viennent après une chaîne particulière. J'aimerais faire cela sur des milliers de fichiers texte.

Je suis capable d'identifier et d'imprimer la chaîne particulière ( 'Abstract') en utilisant le code suivant (obtenu à partir de cette réponse ):

for files in filepath:
    with open(files, 'r') as f:
        for line in f:
            if 'Abstract' in line:
                print line;

Mais comment dire à Python de commencer à lire les lignes qui ne viennent qu'après la chaîne?

Padraic Cunningham

commencez simplement une autre boucle lorsque vous atteignez la ligne à partir de laquelle vous voulez commencer:

for files in filepath:
    with open(files, 'r') as f:
        for line in f:
            if 'Abstract' in line:                
                for line in f: # now you are at the lines you want
                    # do work

Un objet fichier est son propre itérateur, donc lorsque nous atteignons la ligne contenant Abstract, nous continuons notre itération à partir de cette ligne jusqu'à ce que nous ayons consommé l'itérateur.

Un exemple simple:

gen  =  (n for n in xrange(8))

for x in gen:
    if x == 3:
        print("starting second loop")
        for x in gen:
            print("In second loop",x)
    else:
        print("In first loop", x)

In first loop 0
In first loop 1
In first loop 2
starting second loop
In second loop 4
In second loop 5
In second loop 6
In second loop 7

Vous pouvez également utiliser itertools.drop pendant que vous utilisez les lignes jusqu'au point souhaité.

from itertools import dropwhile

for files in filepath:
    with open(files, 'r') as f:
        dropped = dropwhile(lambda _line: "Abstract" not in _line, f)
        next(dropped,"")
        for line in dropped:
                print(line)

Articles connexes