【发布时间】:2011-03-20 08:12:25
【问题描述】:
我有两个文件,我想对它们执行一些逐行操作。 (换句话说,每个文件的第一行对应,第二行也是如此,等等。)现在,我可以想到一些稍微麻烦的方法来同时遍历两个文件。 然而,这是 Python,所以我想有一些语法简写。
换句话说,有没有一些简单的方法来适应
for line in file:
以便同时从两个文件中提取数据?
【问题讨论】:
我有两个文件,我想对它们执行一些逐行操作。 (换句话说,每个文件的第一行对应,第二行也是如此,等等。)现在,我可以想到一些稍微麻烦的方法来同时遍历两个文件。 然而,这是 Python,所以我想有一些语法简写。
换句话说,有没有一些简单的方法来适应
for line in file:
以便同时从两个文件中提取数据?
【问题讨论】:
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
【讨论】:
zip。
itertools.zip_longest。
你可以试试
for line1, line2 in zip(file1, file2):
#do stuff
但请注意,当较短的文件结束时,此循环将退出。
在使用 Python 2 时,itertools.izip 更适合这种事情,因为它不会创建 list。
【讨论】:
zip 如果您使用 Python 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 可确保文件在使用后得到清理,即使发生异常。
【讨论】: