python - una - ¿Cómo iterar a través de líneas en dos archivos simultáneamente?
reemplazar un valor en un array python (3)
Tengo dos archivos y quiero realizar alguna operación de línea en ambos. (En otras palabras, las primeras líneas de cada archivo corresponden, al igual que la segunda, etc.) Ahora, puedo pensar en una serie de formas ligeramente incómodas de iterar en ambos archivos simultáneamente; sin embargo , esto es Python, así que me imagino que hay una abreviatura sintáctica.
En otras palabras, ¿hay alguna forma sencilla de adaptar el
for line in file:
¿De modo que extrae datos de ambos archivos simultáneamente?
Python 2:
Usa 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 tienen una longitud desigual, use izip_longest
.
En Python 3, usa zip
y zip_longest
en zip_longest
lugar. Además, use un with
para abrir archivos, para que el cierre se maneje automáticamente incluso en caso de errores.
with open(file1name) as file1, open(file2name) as file2:
for line1, line2 in zip(file1, file2):
#do stuff
Tu podrías intentar
for line1, line2 in zip(file1, file2):
#do stuff
Sin embargo, con cuidado, este bucle se cerrará cuando finalice el archivo más corto.
Cuando se usa Python 2, itertools.izip
es mejor para este tipo de cosas porque no crea una list
.
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
El uso with
asegura que los archivos se limpien después de su uso, incluso si ocurre una excepción.