Python: lee todas las líneas de archivo de texto en bucle

Quiero leer el archivo de texto enorme línea por línea (y detenerme si se encuentra una línea con “str”). ¿Cómo verificar, si se llega al final del archivo?

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 

No hay necesidad de verificar EOF en python, simplemente haga:

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

¿Por qué with statement :

Es una buena práctica usar la palabra clave with cuando se trata de objetos de archivo. Esto tiene la ventaja de que el archivo se cierra correctamente una vez que finaliza su paquete, incluso si se produce una excepción en el camino.

Solo iterar sobre cada línea en el archivo. Python comprueba automáticamente el final del archivo y cierra el archivo por usted (usando la syntax).

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

Hay situaciones en las que no se puede usar la estructura (bastante convincente) with... for... En ese caso, haga lo siguiente:

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

Esto funcionará porque el readline() deja un carácter de nueva línea final, donde EOF es solo una cadena vacía.