我遇到了在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()
答案 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