2017-03-25 6 views
0

Ich habe eine text file und ich versuche, den gesamten Text b hinzufügen, bis das Wort Finish auftaucht. Aber das gibt mir gerade einen infinte loop Wie kann ich dieseExtrahieren von Dateien in Python

beheben
def extract(filename): 
b = '' 
line = f.readline() 
while line: 
    line = f.readline().strip() 
    while line != 'Finish': 
     b = b + line 
     line = f.readline() 
print(b) 

Jede Hilfe ist willkommen dank

+2

Das 'while' erstellt eine Endlosschleife. Ändern Sie es in "if". –

+0

das Wort Ende zeigt sich eine Reihe von Malen, so im im Versuch, es so den ganzen Text vor der ersten wird hinzugefügt – James

+1

Das Problem ist, dass, wenn die erste Zeile ist 'Finish', dass' while' Schleife nie beendet. Ersetzen Sie es durch ein "if", wie in einem anderen Kommentar empfohlen. Sie müssen auch von der for-Schleife "brechen", wenn Sie eine Zeile finden, die gleich "Finish" ist: https://docs.python.org/2/tutorial/controlflow.html –

Antwort

-2

Sie können itertools.takewhile verwenden, die bis entweder das Ende oder die Datei oder bis zu seiner Kriterien weiterhin erfüllt werden, zB:

from itertools import takewhile 

with open(filename) as fin: 
    lines = (line.strip() for line in fin) 
    b = ''.join(takewhile(lambda L: L != 'Finish', lines)) 

Was für eine Datei:

something 1 
something 2 
something 3 
Finish 
something 4 
something 5 
something 6 

Geben Sie b wie:

something 1something 2something 3 
0

Wenn die ersten line nicht 'Finish' ist, Ihr Code in dieser while Schleife stecken bleibt. Ändern Sie die while zu if, um zu überprüfen, ob line'Finish' ist, und fahren Sie dann mit der nächsten Zeile fort. Wenn Sie eine 'Finish', break aus der for-Schleife oder return b treffen.

(Dank PM 2Ring)

+0

In Python können Sie über das Dateiobjekt, das von 'open' zurückgegeben wird, iterieren. Doing 'für i in f:' iteriert über die Zeilen in der Datei. –

+0

@ PM2Ring Sie haben Recht. –

0

ein einfacher Code ohne Importe:

Textdatei:

something 1 
something 2 
something 3 
Finish 
something 4 
something 5 
something 6 

-Code

file = open('try_text.txt', "r") 
b = '' 
for line in file: 
    if "Finish" in line: 
     to_append = line.strip().split("Finish") 
     b += to_append[0] 
     break 
    else: 
     b += line 
print b 

Ausgabe:

something 1 
something 2 
something 3 
+0

hey kannst du mir meinen aktualisierten Versuch ansehen und sehen, ob es einen Weg gibt, das zu beheben, danke, ich fühle mich wie eine kleine Anpassung würde diese Endlosschleife nicht auftreten – James

+0

etwas falsch mit dem Code, den ich gegeben habe? – Ashish

+0

nein das ist super danke, ich sollte nur zwei while loops benutzen. Eine, die die gesamte Datei überprüft und eine, die prüft, bis das Ende angezeigt wird – James

Verwandte Themen