【发布时间】:2021-11-07 08:28:46
【问题描述】:
我正在尝试比较两个 csv 文件之间的特定值。我使用 csv.DictReader() 函数读取了两个 csv 文件,并且我有一个嵌套的 for 循环,每个循环都通过一个阅读器。当然,对于外部循环的每次迭代,通常内部 for 循环都会重置并遍历其整个循环,但对我而言并非如此。当使用我的调试器时,我可以在外循环的第二次迭代中看到,代码完全跳过了内循环,就好像没有任何东西可以循环一样。这是由于遍历字典阅读器对象的属性吗?如果是这样,我该如何解决?我在下面包含了我的代码的 sn-p。
with open('csv1.csv', 'r') as inFile1:
with open('csv2.csv', 'r') as inFile2:
reader1 = csv.DictReader(inFile1)
reader2 = csv.DictReader(inFile2)
for row1 in reader1:
for row2 in reader2:
if row1['key1'] == row2['key2']:
[Perform other operations here]
【问题讨论】:
-
您确定要将
row1['key1']与row2['key2']进行比较还是要将其与row2['key1']进行比较? -
那些是迭代器,它们是迭代器应该的单通道。您可以“破解”并将底层文件对象的光标移回开头。或者,您可以从一个或两个阅读器中列出一个列表,然后循环遍历它。如果内存是一个问题,您可以重新打开第二个文件并在外部循环的主体内创建 csv 阅读器对象
-
这里的内存是个大问题吗?一般来说,您希望将
with块限制为仅读/写操作,并且任何数据操作都应该在读入文件后发生......您也不需要嵌套with块,您可以打开@987654321 @
标签: python csv dictionary for-loop