2010-07-23 59 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確保文件被使用後清理,即使發生異常。