我正在尝试比较两个csv文件,如果它们匹配则写入第三个(比较/写入效果很好)。我的问题是迭代。在下面的示例中,我的程序将打印1倍于s中的行。如果我将打印水平上移并删除s的for循环,它将打印与z中一样多的行。我本质上是希望它将z中的每一行与s中的每一行进行比较,但它仅对z中的第一行执行并退出
import csv
if __name__ == "__main__":
with open("z_file.csv", "r") as f:
with open("s_file.csv", "r") as g:
with open("results.csv", "a+", newline="") as h:
z = csv.reader(f)
s = csv.reader(g)
final = csv.writer(h)
i = 0
for zrow in z:
i += 1
for srow in s:
print(i)
答案 0 :(得分:1)
第一次单击内循环时,将从文件中读取所有行行。在外循环的第二次迭代中,读数不会重新开始,而是从中断处开始-结束。 z
不是行数组,它是一个惰性生成器。
最简单的解决方案是简单地将文件打开到外部循环中。这样它就可以在每次迭代中重新打开。
更快,实际上是将其读入列表并遍历列表。