Ответ 1
Используйте itertools.izip
для соединения двух итераторов.
from itertools import izip
for line_from_file_1, line_from_file_2 in izip(open(file_1), open(file_2)):
Если файлы имеют неравную длину, используйте izip_longest
.
У меня есть два файла, и я хочу выполнить некоторую линейную операцию для обоих из них. (Другими словами, первые строки каждого файла соответствуют, как и вторая, и т.д.). Теперь я могу думать о нескольких немного громоздких способах итерации обоих файлов одновременно; однако, это Python, поэтому я предполагаю, что есть синтаксическая стенография.
Другими словами, существует ли простой способ адаптировать
for line in file:
чтобы он одновременно извлекал данные из обоих файлов?
Используйте itertools.izip
для соединения двух итераторов.
from itertools import izip
for line_from_file_1, line_from_file_2 in izip(open(file_1), open(file_2)):
Если файлы имеют неравную длину, используйте izip_longest
.
Вы можете попробовать
for line1, line2 in zip(file1, file2):
#do stuff
Осторожно, этот цикл выйдет, когда заканчивается более короткий файл.
При использовании Python 2, itertools.izip
лучше подходит для такого рода вещей, потому что он не создает list
.
Полный пример для потомков:
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
Использование with
гарантирует, что файлы будут очищены после использования, даже если возникает исключение.