不迭代来自csv文件python3的所有行

时间:2014-10-23 10:03:54

标签: python csv python-3.x iteration

我对python3很新,我相信我的问题非常基础。 我一直在网上寻求一些帮助,而我最接近的是线程 Find Common Region in two CSV File in PYTHON

然而在我的情况下,它似乎没有迭代遍历每一行并停在第一个。 所以在我的第一个csv我有2行,让我们说:

A,1,A 1

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 个答案:

答案 0 :(得分:1)

首次传递循环后,文件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)

答案 1 :(得分: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])