比较 Python 中的两个 CSV 文件

Compare two CSV files in Python

我有两个 CSV 文件如下:

CSV1:

**ID  Name  Address  Ph**
  1   Mr.C   dsf     142
  2   Ms.N   asd     251
  4   Mr.V   fgg     014
  12  Ms.S   trw     547

CSV2:

**ID  Name  Service  Day**
  1   Mr.C   AAA     Mon
  2   Ms.N   AAA     Mon
  2   Ms.N   BBB     Tue
  2   Ms.N   AAA     Sat

正如您很快看到的那样,CSV1 文件的独特之处在于每个 ID 只有 1 个实例,而 CSV2 文件有重复。

我正在尝试根据 ID 匹配两个 CSV 文件,然后在它们匹配的任何地方添加 CSV1 中的地址和 Ph 字段到 CSV2 文件。然后将其另存为新的输出文件,同时保留两个原始 CSV 文件。

我已经编写了代码,但这是正在发生的事情:

  1. 将 CSV1 中的所有条目添加到 CSV2 的最后一行
  2. 或者 CSV2 中的所有条目都附加了相同的地址详细信息

这是我目前所做的。

import csv
csv1=open('C:\csv1file.csv')
csv2=open('C:\csv2file.csv')
csv1reader=csv.reader(csv1)
csv2reader=csv.reader(csv2)

outputfile=open('C:\mapped.csv', 'wb')
csvwriter=csv.writer(outputfile)

counter=0
header1=csv1reader.next()
header2=csv2reader.next()

csvwriter.writerow(header2+header1[2:4])

for row1 in csv1reader:
    for row2 in csv2reader:
        if row1[0]==row2[0]:
            counter=counter+1
        csvwriter.writerow(row2+row1[2:4])

我是运行这段代码在Python2.7。您可能已经猜到,我得到的两个不同结果是基于上述代码中 csvwriter 语句的缩进。我觉得我非常接近答案并理解逻辑,但不知何故循环并没有很好地循环。

你们中的任何一位都可以帮忙吗?

谢谢。


问题的出现是因为内循环只工作了一次。这样做的原因是,因为在你 运行 循环一次

之后 csv2reader 将是空的

解决此问题的方法是复制第二个文件中的行并在循环中使用该副本

csvwriter.writerow(header2+header1[2:4])

csv2copy=[]
for row2 in csv2reader: csv2copy.append(row2)

for row1 in csv1reader:
    for row2 in csv2copy:
        print row1,row2,counter
        if row1[0]==row2[0]:
            counter=counter+1
            csvwriter.writerow(row2+row1[2:4])