Python双迭代

问题描述

在Python 2中,您应该导入itertools并使用其izip

with open(file1) as f1:
  with open(file2) as f2:
    for line1, line2 in itertools.izip(f1, f2):
      if line1 != line2:
        print 'files are different'
        break

使用内置zip,两个文件将在循环开始时立即全部读入内存,这可能不是您想要的。在Python 3中,内置功能与Python 2中的功能zip类似itertools.izip-逐渐递增。

解决方法

在两个列表上同时迭代的pythonic方法是什么?

假设我要逐行比较两个文件(将i一个文件中的每个th行与另一个文件中的ith行进行比较),我想执行以下操作:

file1 = csv.reader(open(filename1),...)
file2 = csv.reader(open(filename2),...)

for line1 in file1 and line2 in file2: #pseudo-code!
    if line1 != line2:
        print "files are not identical"
        break

实现这一目标的Python方法是什么?


编辑: 我不是使用文件处理程序,而是CSV阅读器(csv.reader(open(file),...)),并且zip()似乎无法使用它…


最终编辑: 像@Alex M.建议的那样,zip()在第一次迭代时将文件加载到内存中,因此在大文件上这是一个问题。在Python
2上,使用itertools可解决此问题。