我有两个文件,我想在它们两个上执行一些行操作。 (换句话说,每个文件的第一行对应于第二行,等等)。现在,我可以想到一些稍微麻烦的方法来同时遍历两个文件; 但是,这是Python,所以我想像有一些语法简写。如何同时迭代两个文件中的行?
换句话说,有没有适应
for line in file:
,使其同时从两个文件中提取数据,一些简单的方法是什么?
我有两个文件,我想在它们两个上执行一些行操作。 (换句话说,每个文件的第一行对应于第二行,等等)。现在,我可以想到一些稍微麻烦的方法来同时遍历两个文件; 但是,这是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
。
如果您使用Python 3(当您回复时可能不存在),'zip'就可以。编辑。 – 2017-05-01 18:56:16
留给后人一个完整的例子:
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
确保文件被使用后清理,即使发生异常。
+使用izip代替zip – zvone 2010-07-23 21:21:46
在Python 3中,您需要使用'zip'。 – tttthomasssss 2016-11-17 09:04:39
在Python 3中,如果要消耗直到最长文件结尾的行,请使用'itertools.zip_longest'。 – 2017-08-29 22:11:16