2010-07-23 28 views
12

Ho due file e voglio eseguire alcune operazioni in linea su entrambi. (In altre parole, le prime righe di ogni file corrispondono, così come la seconda, ecc.) Ora, posso pensare a un numero di modi leggermente macchinosi per scorrere simultaneamente su entrambi i file; tuttavia, questo è Python, quindi immagino che ci sia qualche sintassi sintattica.Come eseguire iterazioni su più righe contemporaneamente in due file?

In altre parole, c'è qualche modo semplice per adattare il

for line in file: 

modo che estrae i dati da entrambi i file contemporaneamente?

risposta

26

Utilizzare itertools.izip per unire i due iteratori.

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

Se i file sono di lunghezza diversa, usare izip_longest.

+0

+ per l'utilizzo di izip anziché zip – zvone

+3

In Python 3, è necessario utilizzare 'zip'. – tttthomasssss

+0

In Python 3, usare 'itertools.zip_longest' se si desidera utilizzare le righe fino alla fine del file più lungo. –

7

Si potrebbe provare

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

Attenzione però, questo ciclo uscirà quando il file più breve termine.

Quando si utilizza Python 2, itertools.izip è meglio per questo genere di cose perché non crea uno list.

+0

'zip' va bene se usi Python 3 (che probabilmente non esisteva quando hai risposto). La modifica. –

3

Un esempio completo per i posteri:

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 

Utilizzando with assicura i file vengono eliminati dopo l'uso, anche se si verifica un'eccezione.

Problemi correlati