我们假设我有一个字典,其中包含3个文本文件的文件名和全名,所有行数相同,N。
dof = {'myf1':'/a/b/myf1.txt', 'myf2':'/a/b/myf2.txt', 'myf3':'/a/b/myf3.txt'}
迭代所有文件的最有效/ pythonic方式是什么,每行如下:
line 1 of file 1, then line 1 of file 2, then line 1 of file 3;
line 2 of file 1, then line 2 of file 2, then line 2 of file 3;
...
line N of file 1, then line N of file 2, then line N of file 3;
字典中任意数量的文件和任意数量的总行的一般解决方案将是更可取的。
答案 0 :(得分:4)
使用zip()
迭代三元组中的行:
for line1, line2, line3 in zip(openfile1, openfile2, openfile3):
您可以使用以下命令生成打开的文件句柄:
files = [open(dof[name]) for name in sorted(dof)]
for lines in zip(*files):
其中lines
是一个字符串元组,是每个输入文件的下一行。
如果不的输入文件具有相同的行数,则可以使用itertools.izip_longest()
来为缺少的行提供替换值(在Python中使用itertools.zip_longest()
3)。