如何同时遍历两个文件的行?

26 投票
3 回答
19056 浏览
提问于 2025-04-16 01:45

我有两个文件,我想对它们的每一行进行一些操作。也就是说,每个文件的第一行是对应的,第二行也是,依此类推。现在,我能想到一些稍微麻烦的方法来同时处理这两个文件;不过,这是Python,所以我想应该有一些简单的写法。

换句话说,有没有什么简单的方法可以调整

for line in file:

这样可以同时从两个文件中获取数据呢?

3 个回答

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 这个写法可以确保文件在用完后会被自动清理,即使在使用过程中出现了错误。

10

你可以试试这个

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

不过要小心,这个循环会在较短的文件结束时停止。

如果你使用的是Python 2,itertools.izip会更适合这种情况,因为它不会创建一个list

47

Python 2:

可以用 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 3 中,使用 zipzip_longest 来代替。同时,打开文件时用 with 语句,这样即使出现错误也能自动关闭文件。

with open(file1name) as file1, open(file2name) as file2:
    for line1, line2 in zip(file1, file2):
        #do stuff

撰写回答