2010-07-23 21 views
12

Tengo dos archivos, y deseo realizar una operación en línea entre ambos. (En otras palabras, las primeras líneas de cada archivo corresponden, al igual que el segundo, etc.) Ahora, puedo pensar en una serie de formas ligeramente engorrosas de iterar en ambos archivos simultáneamente; sin embargo,, este es Python, así que imagino que hay una taquigrafía sintáctica.¿Cómo iterar entre líneas en dos archivos simultáneamente?

En otras palabras, ¿existe alguna forma sencilla de adaptar el

for line in file: 

de modo que extrae datos de ambos archivos simultáneamente?

Respuesta

26

Utilice itertools.izip para unir los dos iteradores.

from itertools import izip 
for line_from_file_1, line_from_file_2 in izip(open(file_1), open(file_2)): 

Si los archivos son de longitud desigual, utilice izip_longest.

+0

+ por usar izip en lugar de zip – zvone

+3

En Python 3, debe usar 'zip'. – tttthomasssss

+0

En Python 3, use 'itertools.zip_longest' si desea consumir líneas hasta el final del archivo más largo. –

7

Usted podría intentar

for line1, line2 in zip(file1, file2): 
    #do stuff 

Cuidado, sin embargo, este bucle se cerrará cuando finalice el archivo más corto.

Al usar Python 2, itertools.izip es mejor para este tipo de cosas, ya que no crea un list.

+0

'zip' está bien si usa Python 3 (que probablemente no existía cuando respondió). Edición. –

3

Un ejemplo completo para la posteridad:

from itertools import izip, izip_longest 

file1name = '/some/path/and/file' 
file2name = '/another/path/and/another/file' 

with open(file1name) as file1, open(file2name) as file2: 
    for line1, line2 in izip(file1, file2): # or izip_longest 
     # do something with the lines 

Usando with asegura que los archivos se limpian después de su uso, incluso si se produce una excepción.

Cuestiones relacionadas