我有兩個文件,我想在它們兩個上執行一些行操作。 (換句話說,每個文件的第一行對應於第二行,等等)。現在,我可以想到一些稍微麻煩的方法來同時遍歷兩個文件; 但是,這是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