比较 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 文件。
我已经编写了代码,但这是正在发生的事情:
- 将 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])
我是运行这段代码在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])
我有两个 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 文件。
我已经编写了代码,但这是正在发生的事情:
- 将 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])
我是运行这段代码在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])