python - Python嵌套了两个字典的For循环,内循环不重置
问题描述
我正在尝试比较两个 csv 文件之间的特定值。我使用该函数读取了两个 csv 文件,csv.DictReader()
并且我有一个嵌套的 for 循环,每个循环都通过一个阅读器。当然,通常内部 for 循环将重置并在外部循环的每次迭代中遍历其整个循环,但对我而言并非如此。当使用我的调试器时,我可以在外循环的第二次迭代中看到,代码完全跳过了内循环,就好像没有任何东西可以循环一样。这是由于遍历字典阅读器对象的属性吗?如果是这样,我该如何解决?我在下面包含了我的代码片段。
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]
解决方案
一旦你用尽了一个迭代器,它就不会自动重置。
相反,您必须为每个外部迭代提供一个新的内部迭代器。
with open('csv1.csv', 'r') as inFile1:
reader1 = csv.DictReader(inFile1)
for row1 in reader1:
with open('csv2.csv', 'r') as inFile2:
reader2 = csv.DictReader(inFile2)
for row2 in reader2:
if row1['key1'] == row2['key2']:
[Perform other operations here]
或者,如果文件大小合理,只需在处理文件之前将文件读入内存:
with open('csv1.csv', 'r') as inFile1, open('csv2.csv', 'r') as inFile2:
csv1 = list(csv.DictReader(inFile1))
csv2 = list(csv.DictReader(inFile2))
for dict1 in csv1:
for dict2 in csv2:
if dict1['key1'] == dict2['key2']:
[Perform other operations here]
推荐阅读
- javascript - 在 ReactJs 的映射函数中调用子组件
- python-3.x - “rasa init –no-prompt”返回 NotFoundError
- python - Python NEAT 似乎没有向前几代学习
- apache-kafka - 使用 Kafka Listener 与 Kafka Consumer 获取具有指定密钥的消息
- mysql - 如何发送多个选择 sql 查询?
- javascript - [Vue 警告]:v-on 处理程序中的错误:“InvalidStateError:尝试使用不可用或不再可用的对象”
- node.js - 通过 POSTMAN 的 HTTPS 连接失败
- html - 如何在我的引导导航栏上居中徽标
- c++ - Visual Studio C++ 多项目解决方案设置
- python - 获取没有 XPath 的 WebElement 的兄弟元素 [Python/Selenium]