如何同时遍历两个文件的行?
我有两个文件,我想对它们的每一行进行一些操作。也就是说,每个文件的第一行是对应的,第二行也是,依此类推。现在,我能想到一些稍微麻烦的方法来同时处理这两个文件;不过,这是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 中,使用 zip
和 zip_longest
来代替。同时,打开文件时用 with
语句,这样即使出现错误也能自动关闭文件。
with open(file1name) as file1, open(file2name) as file2:
for line1, line2 in zip(file1, file2):
#do stuff