For 循环不会嵌套

时间:2021-01-09 07:10:28

标签: python

我正在编写一个脚本来比较两个 csv 文件。计划是让脚本找到具有相同 ID 的项目并将它们发送到第三个 csv。

我为此使用了嵌套的 for 循环。它应该在第一个文件中选择一行,然后将它与第二个文件中的每一行(一次一个)进行比较。到目前为止一切顺利。

脚本应对第一个文件中的每一行重复此操作。但是,经过一些调试后,我发现脚本在停止之前仅将第一行与第二行中的每一行进行比较。其他行从不进行比较。

我这辈子都不明白为什么。我已经很害怕万一这被证明是小学生的错误,但我认为值得向社区询问。

有什么想法吗?


outdata = []
newPrices = open(csv1)
oldPrices = open (csv2)
priceComparison = open (csv3)

new=csv.reader(newPrices, delimiter=',')
old=csv.reader(oldPrices, delimiter=',')
writer=csv.writer(priceComparison,delimiter=',')
for row1 in new:
    print(row1[0])
    for row2 in old:
        print(row1[0]) #Seems to be sticking on the first value and not looping the first for loop
        if row1[0].upper == row2[0]:
            print("row: ", row)
            outdata.append([row1])
            outdata.append([row2])
        
print(outdata)
writer.writerows(outdata)

1 个答案:

答案 0 :(得分:1)

我不是 100% 确定,但我的猜测是 csv.reader 返回一个迭代器,它只能被消耗一次。这就是为什么你只循环 old 一次。在遍历它们之前尝试将这些行放入列表中,如下所示:

new = list(csv.reader(newPrices, delimiter=","))
old = list(csv.reader(oldPrices, delimiter=","))

这里是文档的链接,以防万一:https://docs.python.org/3/library/csv.html#csv.reader