<p>柯克兰回答了这个问题的实际解决办法。这里有一点背景,如果有人在这里结束。你知道吗</p>
<p>问题是<code>csv.DictReader()</code>产生了一个类型为<code>DictReader</code>的实例,根据<a href="https://docs.python.org/2/library/csv.html#csv.DictReader" rel="nofollow noreferrer">the docs</a>,“它的操作就像一个普通的读取器一样。”<br/>
这意味着从<code>DictReader</code>读取值会耗尽实例的内容。<br/>
在第一轮内环之后,<code>secondDataSet</code>中什么都没有了。在以后的迭代中,内部循环没有任何元素可以迭代。你知道吗</p>
<p>这可以通过向<code>print</code>语句添加标志来验证:</p>
<pre><code>def processCommandCenterFile(data):
...
for firstDataSetRecord in firstDataSet:
...
print("first print:", firstDataSetNumber)
for secondDataSetRecord in secondDataSet:
print("second print:", firstDataSetNumber)
...
processCommandCenterFile(data)
</code></pre>
<p>输出:</p>
<pre><code>('first print:', '143739629')
('second print:', '143739629')
('second print:', '143739629')
('second print:', '143739629')
('second print:', '143739629')
('second print:', '143739629')
('second print:', '143739629')
('second print:', '143739629')
('second print:', '143739629')
('second print:', '143739629')
('first print:', '143739629')
('first print:', '143750196')
('first print:', '143750196')
('first print:', '143739646')
('first print:', '143739646')
('first print:', '143739661')
('first print:', '143739661')
('first print:', '143739718')
</code></pre>
<p>正如Kirkland所指出的,最好的选择是将<code>DictReader</code>转换为dict列表,例如</p>
<pre><code>list(csv.DictReader(file, fieldnames=headers))
</code></pre>
<p>(或者只使用熊猫)</p>