Python3未遍历csv文件的所有行

0 投票
2 回答
526 浏览
提问于 2025-04-29 05:33

我刚接触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])

撰写回答