2012-07-02 43 views
32

Tengo 2 archivos de texto en dos idiomas diferentes y están alineados línea por línea. Es decir. la primera línea en el archivo de texto1 debe ser igual a la primera línea en el archivo de texto2, y así sucesivamente.Leer dos archivos de texto línea por línea simultáneamente -python

¿Hay alguna manera de leer ambos archivos línea por línea simultáneamente?

A continuación se muestra una muestra de cómo deberían verse los archivos, imagine que el número de líneas por archivo es de alrededor de 1,000,000.

textfile1:

This is a the first line in English 
This is a the 2nd line in English 
This is a the third line in English 

textfile2:

C'est la première ligne en Français 
C'est la deuxième ligne en Français 
C'est la troisième ligne en Français 

salida deseada

This is a the first line in English\tC'est la première ligne en Français 
This is a the 2nd line in English\tC'est la deuxième ligne en Français 
This is a the third line in English\tC'est la troisième ligne en Français 

Hay una versión de Java de este Read two textfile line by line simultaneously -java, pero Python no utiliza BufferedReader que lee línea nombre del autor. Entonces, ¿cómo se haría?

+3

Esto no es Python, pero si sólo tiene la salida en un archivo nuevo, 'pegar textfile1 textfile2> output' debería funcionar también – eumiro

+0

Si le gusta la respuesta de larsmans, puede marcarla como aceptada. –

Respuesta

64
from itertools import izip 

with open("textfile1") as textfile1, open("textfile2") as textfile2: 
    for x, y in izip(textfile1, textfile2): 
     x = x.strip() 
     y = y.strip() 
     print("{0}\t{1}".format(x, y)) 

En Python 3, reemplace itertools.izip con la incorporada en el zip.

+0

Gracias, funcionó como un encanto – alvas

+0

consigo el tema: Archivo "MergeANNOVARResults.py", línea 10 con abierta (RefSeq) como refseq_fh abierta (gencódigo) como gencode_fh: ^ SyntaxError: no válido – jmtoung

13
with open(file1) as f1, open(fil2) as f2: 
    for x, y in zip(f1, f2): 
    print("{0}\t{1}".format(x.strip(), y.strip())) 

de salida:

This is a the first line in English C'est la première ligne en Français 
This is a the 2nd line in English C'est la deuxième ligne en Français 
This is a the third line in English C'est la troisième ligne en Français 
+2

Tenga en cuenta que zip() extraerá el contenido completo de ambos archivos en la memoria (en Python 2.x) –

+0

Mejor uso ['from itertools import izip'] (http://docs.python.org/library/itertools. html # itertools.izip) o ['izip_longest'] (http://docs.python.org/library/itertools.html#itertools.izip_longest). –

+2

+1 para el uso de 'with' embargo. –

3

Python le permite leer línea por línea, e incluso es el comportamiento predeterminado: simplemente itera sobre el archivo como si fuera iterar sobre una lista.

WRT/iterar sobre dos iterables a la vez, itertools.izip es su amigo:

from itertools import izip 
fileA = open("/path/to/file1") 
fileB = open("/path/to/file2") 
for lineA, lineB in izip(fileA, fileB): 
    print "%s\t%s" % (lineA.rstrip(), lineB.rstrip()) 
Cuestiones relacionadas