2013-07-30 17 views
33

Voglio leggere un file di testo enorme riga per riga (e fermarsi se viene trovata una riga con "str"). Come verificare, se viene raggiunta la fine del file?Python: leggi tutte le righe di file di testo nel loop

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 

risposta

74

Non c'è alcuna necessità di verificare la presenza di EOF in python, semplicemente:

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

Why the with statement:

È buona norma utilizzare la parola chiave with quando si tratta di file di oggetti . Questo ha il vantaggio che il file viene chiuso correttamente dopo il della sua suite, anche se viene sollevata un'eccezione durante il percorso.

8

Basta iterare su ogni riga del file. Python controlla automaticamente la fine del file e chiude il file per te (usando la sintassi with).

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

Ci sono situazioni in cui non è possibile utilizzare la struttura (abbastanza convincente) with... for.... In tal caso, effettuare le seguenti operazioni:

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

Ciò funzionerà perché il il readline() lascia un fine riga, dove come EOF è solo una stringa vuota.

Problemi correlati