<p>在运行代码并将<code>print</code>语句放在少数地方之后,观察到只对<code>file2.csv</code>的第一个值,即“ABC,66100”进行比较。Rest代码只是跳过</p>
<p>因为<a href="https://docs.python.org/2/library/csv.html#csv.reader" rel="nofollow noreferrer">csv.reader</a>返回一个reader对象,它是一个迭代器。<br/>
因此,一旦迭代整个对象,它就变成空的。
作为一种解决方法,您需要将阅读器保存为列表,以便反复迭代</p>
<p>修改行<br/>
<code>reader1 = csv.reader(in_file1)</code></p>
<p>至</p>
<p><code>reader1 = list(csv.reader(in_file1))</code></p>
<p>应该会给你想要的结果</p>
<pre><code>import csv
updated_list = []
with open("file1.csv","r") as in_file1, open("file2.csv", "r") as in_file2, open("file3.csv", "w", newline='') as out_file:
reader2 = csv.reader(in_file2)
reader1 = list(csv.reader(in_file1))
writer_final = csv.writer(out_file)
for row2 in reader2: #reader2 is for file2
for row1 in reader1: #reader1 is for file1
if str(row2[1].strip()) == str(row1[0].strip()):
updated_list.append([row2[0],row2[1],row1[1],row1[2]])
break
writer_final.writerows(updated_list)
cat file3.csv
ABC,66100,14.116,42.3301
Random,88068,16.5339,38.6899
Raond2,87100,16.2531,39.2989
Raondm3,87100,16.2531,39.2989
Raondom4,87054,16.3171,39.1784
</code></pre>
<p><strong>注意</strong>
如果您有大文件,将读取器转换为列表可能是有害的,因为它可能会影响内存。更好的选择是使用<code>openpyxl</code>或将数据加载到<code>pandas</code>数据帧中并在其中进行操作</p>