2013-07-30 15 views
33

Ich möchte riesige Textdatei Zeile für Zeile lesen (und zu stoppen, wenn eine Zeile mit "str" ​​gefunden). Wie überprüft man, ob das Dateiende erreicht ist?Python: Lesen Sie alle Text-Dateizeilen in Schleife

fn = 't.log' 
f = open(fn, 'r') 
while not _is_eof(f): ## how to check that end is reached? 
    s = f.readline() 
    print s 
    if "str" in s: break 

Antwort

74

Es gibt keine Notwendigkeit für EOF in Python zu überprüfen, einfach tun:

with open('t.ini') as f: 
    for line in f: 
     print line 
     if 'str' in line: 
      break 

Why the with statement:

Es empfiehlt sich, die with Schlüsselwort zu verwenden, wenn sie mit Datei Umgang Objekte . Dies hat den Vorteil, dass die Datei nach ihrer Suite ordnungsgemäß geschlossen wird, auch wenn eine Ausnahme auf dem Weg ausgelöst wird.

8

Iterieren Sie einfach über jede Zeile in der Datei. Python sucht automatisch nach dem Ende der Datei und schließt die Datei für Sie (mit der Syntax with).

with open('fileName', 'r') as f: 
    for line in f: 
     if 'str' in line: 
      break 
3

Es gibt Situationen, in denen Sie die (recht überzeugende) Struktur with... for... nicht verwenden können. In diesem Fall wie folgt vor:

line = self.fo.readline() 
if len(line) != 0: 
    if 'str' in line: 
     break 

Dies funktioniert, weil das die readline() ein nachlauf Newline-Zeichen verlässt, wo als EOF nur eine leere Zeichenfolge ist.

Verwandte Themen