嵌套For循环使用python和csv

时间:2018-01-30 10:19:43

标签: python loops csv

我遇到了在python中使用csv对象编码嵌套for循环的问题。我想解析两个csv文件并比较它们的一部分。因此,我编写了下面的嵌套循环。 我期望的是python解析外部循环的第一项的内部循环,然后对于外部循环的第二项,他再次解析内部循环,依此类推。 发生了什么,内部循环被解析,然后外部循环传递,甚至没有再次进入内部循环。

使用csv这样的非num_list = [1, 2, 3]个对象时,效果与预期相同。

感谢。

import csv

csvfile = open('/Users/rene/Downloads/Test/Export.csv', newline='', encoding='windows-1252')
spamreader = csv.reader(csvfile, dialect='excel', delimiter=';')

csvfile1 = open('/Users/rene/Downloads/Test/Transfer.csv', newline='', encoding='windows-1252')
spamreader1 = csv.reader(csvfile1, dialect='excel', delimiter=';')

for row in spamreader:
    print("1row:"+row[1])
    for row1 in spamreader1:
        print("2row:"+row[1])
        print("2row1:"+row1[0])

csvfile.close()
csvfile1.close()

1 个答案:

答案 0 :(得分:2)

csv.reader对象是在消耗时耗尽的迭代器。因此,在外循环的第一次迭代之后,spamreader1已经为空。

只需将您在内循环中迭代的spamreader1转换为list,这样您就可以多次迭代它:

# ...
# collect all rows in a list
spamreader1 = list(csv.reader(csvfile1, dialect='excel', delimiter=';'))

for row in spamreader:
    # ...
    for row1 in spamreader1:
        # now this will work as you expect