2010-07-23 56 views
12

我有两个文件,我想在它们两个上执行一些行操作。 (换句话说,每个文件的第一行对应于第二行,等等)。现在,我可以想到一些稍微麻烦的方法来同时遍历两个文件; 但是,这是Python,所以我想像有一些语法简写。如何同时迭代两个文件中的行?

换句话说,有没有适应

for line in file: 

,使其同时从两个文件中提取数据,一些简单的方法是什么?

回答

26

使用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

+0

+使用izip代替zip – zvone 2010-07-23 21:21:46

+3

在Python 3中,您需要使用'zip'。 – tttthomasssss 2016-11-17 09:04:39

+0

在Python 3中,如果要消耗直到最长文件结尾的行,请使用'itertools.zip_longest'。 – 2017-08-29 22:11:16

7

你可以

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

仔细虽然尝试,在较短的文件结束这个循环将退出。

当使用Python 2时,itertools.izip更适合这种情况,因为它不会创建list

+0

如果您使用Python 3(当您回复时可能不存在),'zip'就可以。编辑。 – 2017-05-01 18:56:16

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确保文件被使用后清理,即使发生异常。