首页 文章

比较Python中的两个CSV文件

提问于
浏览
3

我有两个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文件,然后匹配它们在CSV2文件中添加CSV1文件中的地址和Ph字段 . 然后将其保存为新的输出文件,保留两个原始CSV文件 .

我写了一段代码但是这里发生了什么:

  • CSV1中的所有条目都将添加到CSV2的最后一行

  • 或者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])

我在Python 2.7中运行此代码 . 您可能已经猜到了我得到的两个不同的结果是基于上面代码中csvwriter语句的缩进 . 我觉得我非常接近答案并理解逻辑但不知何故循环不能很好地循环 .

你们中的任何人都可以协助吗?

谢谢 .


1 回答

  • 2

    问题出现是因为内循环只能工作一次 . 原因是,因为在运行一次循环后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])
    

相关问题