Python3未遍历csv文件的所有行
我刚接触python3,肯定我的问题很基础。
我在网上找了一些帮助,找到的最接近的内容来自这个帖子:在PYTHON中查找两个CSV文件的共同区域
不过在我的情况下,似乎没有遍历每一行,而是停在了第一行。
在我的第一个csv文件里,有两行,假设是:
A,1,A1
B,2,B2
而在我的第二个csv文件里,有一千行,内容大概是:
A,1,B5
A,2,A2
B,2,C6
B,3,C7
C,3,D7
C,4,D8
......
我的代码如下:
read1 = csv.reader(csv1)
for row1 in read1:
read2 = csv.reader(csv2)
for row2 in read2:
if row1[0] == row2[0] and row1[1] == row2[1]:
print('There is a match', row1[0], row1[1])
但是,我的输出结果是:找到匹配 A 1
它只找到第一个匹配,而没有找到其他匹配:B 2。
我不太确定我的循环哪里出了问题。
谢谢你们的帮助!
2 个回答
2
在你第一次循环结束后,文件 csv2
会到达文件末尾。之后再读取这个文件时,会返回一个空字符串。即使你用同一个文件对象创建了新的 CSV 读取器,这个情况也是一样的。因此,第二次匹配找不到结果,因为第二个文件实际上没有被处理。
最简单的解决办法是在处理完第二个文件后调用 csv2.seek(0)
,也就是说:
read1 = csv.reader(csv1)
for row1 in read1:
read2 = csv.reader(csv2)
for row2 in read2:
if row1[0] == row2[0] and row1[1] == row2[1]:
print('There is a match', row1[0], row1[1])
csv2.seek(0)
0
把内容放到一个列表里:
import csv
with open(file1) as f1,open(file2) as f2:
rd1, rd2 = csv.reader(f1) ,list(csv.reader(f2))
for row1 in rd1:
for row2 in rd2:
if row1[0] == row2[0] and row1[1] == row2[1]:
print('There is a match', row1[0], row1[1])