首页 > 解决方案 > 匹配两个csv文件之间的数据并替换数据

问题描述

我有两个 csv 文件。首先就像

a, right 
b, something 
c, right
d, something 

第二个文件

b,  wrong 
e, something 
a,  wrong 
d, something 

我想要像这样的输出

b, right 
e,  something 
a, right
d, something 

我试过这段代码

import csv

f1 = open("file1.csv")
f2 = open("file2.csv")

csv_f1 = csv.reader(f1)
csv_f2 = csv.reader(f2)

for row1 in csv_f1: 
    for row2 in csv_f2:
        if row1[0] == row2[0]:
            print row1[0], row1[1]
        else:
            print row2[0], row2[1]

标签: pythonlistcsvfile-read

解决方案


如果我理解正确的话。您需要逐行比较 csvs。

在这种情况下,您可以使用zip方式pythoonic

For 循环如下所示

for row1, row2 in zip(csv_f1, csv_f2): 

完整代码

import csv

f1 = open("file1.csv")
f2 = open("file2.csv")

csv_f1 = csv.reader(f1)
csv_f2 = csv.reader(f2)

for row1, row2 in zip(csv_f1, csv_f2): 
    if row1[0] == row2[0]:
        print(row1[0], row1[1])
    else:
        print(row2[0], row2[1])

顺便一提。它在python3. 你似乎在使用python2

使用 zip_longest

import csv, itertools

f1 = open("file1.csv")
f2 = open("file2.csv")

csv_f1 = csv.reader(f1)
csv_f2 = csv.reader(f2)

for row1, row2 in itertools.zip_longest(csv_f1, csv_f2, fillvalue=[0, 0]):
    if row1[0] == row2[0]:
        print(row1[0], row1[1])
    else:
        print(row2[0], row2[1])

推荐阅读