我有两个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只有一个实例,而CSV2重复。
我正在尝试根据ID匹配两个CSV文件,然后在匹配的任何位置向CSV2文件添加CSV1中的地址和Ph字段。然后将其保存为新的输出文件,保留两个原始CSV文件。
我已经编写了一段代码,但这里发生了什么:
这是我到目前为止所做的事情。
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语句的缩进。我觉得我非常接近答案并理解逻辑,但不知何故循环不能很好地循环。
你们中的任何人都可以帮忙吗?
感谢。
答案 0 :(得分:2)
The problem arises because the inner loop only works once. the reason for that is, because csv2reader will be empty after you run the loop once
a way to fix this would be to make a copy of the rows in the second file and use that copy in the loop
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])