Подтвердить что ты не робот

Как перебирать строки в двух файлах одновременно?

У меня есть два файла, и я хочу выполнить некоторую линейную операцию для обоих из них. (Другими словами, первые строки каждого файла соответствуют, как и вторая, и т.д.). Теперь я могу думать о нескольких немного громоздких способах итерации обоих файлов одновременно; однако, это Python, поэтому я предполагаю, что есть синтаксическая стенография.

Другими словами, существует ли простой способ адаптировать

for line in file:

чтобы он одновременно извлекал данные из обоих файлов?

4b9b3361

Ответ 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.

Ответ 2

Вы можете попробовать

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

Осторожно, этот цикл выйдет, когда заканчивается более короткий файл.

При использовании Python 2, itertools.izip лучше подходит для такого рода вещей, потому что он не создает list.

Ответ 3

Полный пример для потомков:

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 гарантирует, что файлы будут очищены после использования, даже если возникает исключение.