Wie lies ich Zeilen in einer Textdatei nur nach einer bestimmten Zeichenfolge mit Python?

8

Mit Python möchte ich alle Zeilen in einer Textdatei, die hinter einer bestimmten Zeichenfolge stehen, in ein Wörterbuch einlesen. Ich möchte das über Tausende von Textdateien machen.

Ich bin in der Lage, die bestimmte Zeichenfolge ("Abstract") zu identifizieren und auszudrucken, indem ich den folgenden Code verwende (erhalten von dieser Stapelüberlaufantwort ):

%Vor%

Aber wie sage ich Python, um die Zeilen zu lesen, die nur nach der Zeichenfolge kommen?

    
Brian Zelip 06.01.2015, 19:37
quelle

6 Antworten

14

Starten Sie einfach eine andere Schleife, wenn Sie die gewünschte Zeile erreichen:

%Vor%

Ein Dateiobjekt ist ein eigener Iterator. Wenn wir also die Zeile mit Abstract erreichen, setzen wir unsere Iteration von dieser Zeile fort, bis wir den Iterator verbraucht haben.

Ein einfaches Beispiel:

%Vor%

Sie können auch itertools.dropwhile verwenden, um die Zeilen bis zu diesem Punkt zu verwenden du willst.

%Vor%     
Padraic Cunningham 06.01.2015, 19:42
quelle
7

Verwenden Sie einen booleschen Wert, um Zeilen bis zu diesem Punkt zu ignorieren:

%Vor%     
Kroltan 06.01.2015 19:41
quelle
6

Sie können hier itertools.dropwhile und itertools.islice verwenden, ein Pseudo-Beispiel:

%Vor%     
Jon Clements 06.01.2015 19:47
quelle
4

Nur um zu verdeutlichen, "liest" Ihr Code bereits alle Zeilen. Um zu beginnen, Zeilen nach einem bestimmten Punkt "aufmerksam zu machen", können Sie einfach ein boolesches Flag setzen, um anzugeben, ob Zeilen ignoriert werden sollen, und es an jeder Zeile überprüfen.

%Vor%

Wenn es Ihnen nichts ausmacht, den Code etwas neu anzuordnen, können Sie stattdessen auch zwei Partialloops verwenden: eine Schleife, die endet, sobald Sie Ihre Triggerphrase gefunden haben ( 'Abstract' ), und eine, die alles Folgende liest Linien. Dieser Ansatz ist ein wenig sauberer (und ein ganz kleines bisschen schneller).

%Vor%

Der Grund dafür ist, dass das von open zurückgegebene Dateiobjekt sich wie ein Generator verhält und nicht etwa , eine Liste: Es erzeugt nur Werte, wie sie angefordert werden. Wenn die erste Schleife stoppt, bleibt die interne Position der Datei am Anfang der ersten "ungelesenen" Zeile. Das heißt, wenn Sie die zweite Schleife eingeben, ist die erste Zeile, die Sie sehen, die erste Zeile nach der, die break ausgelöst hat.

    
Henry Keiter 06.01.2015 19:41
quelle
3

Für mich ist der folgende Code leichter zu verstehen.

%Vor%     
eguaio 31.10.2016 18:21
quelle
1

Wenn ich eine Vermutung über die Art und Weise, wie das Wörterbuch beteiligt ist, mache, würde ich es so schreiben:

%Vor%

So enthält Ihr Wörterbuch für jede Datei ein Tupel von Zeilen.

Dies funktioniert, weil die Schleife bis einschließlich der von Ihnen identifizierten Zeile liest und die verbleibenden Zeilen in der Datei bereit zum Lesen von f bleibt.

    
Steve Jessop 06.01.2015 20:03
quelle

Tags und Links