不遍历csv文件python3中的所有行

不遍历csv文件python3中的所有行,python,csv,python-3.x,iteration,Python,Csv,Python 3.x,Iteration,我是python3的新手,我相信我的问题很基本。 我一直在网上寻找一些帮助,我得到的最接近的来自线程 然而,在我的例子中,它似乎不是遍历everyline,而是在第一行停止。 因此,在我的第一个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 read

我是python3的新手,我相信我的问题很基本。 我一直在网上寻找一些帮助,我得到的最接近的来自线程

然而,在我的例子中,它似乎不是遍历everyline,而是在第一行停止。 因此,在我的第一个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 它只找到第一个匹配项,而不找到另一个匹配项E:B 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)

将内容放入列表中:

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])

不用担心,不客气。如果文件非常大,您可以使用seek,但对于1000个元素,您将被罚款。谢谢,我尝试添加csv2.seek(0),但收到错误消息AttributeError:“\u csv.reader”对象没有属性“seek”,然后另一个答案出现并生效。谢谢你的时间。没问题,我的答案解释了你出现问题的原因,而另一个答案可能是更好的解决方案。请注意,
csv2
是一个文件对象。看起来您可能尝试了
read2.seek(0)
而不是
csv2.seek(0)
?是的,也许我尝试了=S,对此表示抱歉!那太尴尬了。无论如何,干杯。