2011-12-18 8 views
11

Tener un objeto de archivo en Python 2.7:Diferencia entre xreadlines y de bucle de un archivo

f = open('my_file', 'r') 

¿Cuál sería la diferencia entre fines de bucle el archivo (forma más común) y el uso de la función xreadlines():

for line in f: 
    # Do something with line 

y

for line in f.xreadlines(): 
    # Do something with line 

Es decir, las dos opciones definen un generador, en contraste con el readlines() o read() funciones que carga todo el contenido del archivo a la memoria.

¿Hay algún rendimiento o mejora de manejo de archivos en alguno de ellos? ¿O simplemente son formas equivalentes de hacer lo mismo?

+2

'xreadlines' fue lo primero. En general, Python comenzó con funciones basadas en listas ('range',' items', 'zip'), contrapartes de iteradores introducidas (' xrange, 'iteritems',' izip') y luego cambió las funciones originales para devolver iteradores. Este es el final de uno de esos cambios. – katrielalex

+0

Note también que 'for _ in something' llamará' iter (something) 'detrás de las escenas. – katrielalex

Respuesta

19

De docs.python.org

file.xreadlines() 
This method returns the same thing as iter(f). 

New in version 2.1. 

Deprecated since version 2.3: Use for line in file instead. 

... y es mejor utilizar la palabra clave with cuando se trabaja con archivos; de nuevo, ve la página de documentos.

with open('my_file', 'r') as f: 
    for line in f: 
     # do stuff 
+1

por lo que significa que son perfectamente y exactamente lo mismo! – juliomalegria

Cuestiones relacionadas