使用列值进行CSV比较

时间:2019-07-19 16:44:46

标签: python

我正在尝试比较两个csv中的数据。 csv1将说100行(仅作为示例)和30列(固定) csv2将有1000行(仅作为示例)和30列(固定)

我想做以下事情: 1.与csv1相比,在csv2中找到所有具有列值的行。因此,如果CSV2的第1行的列值与csv1的Y行匹配,则抓取这两行,比较两行中的数据,将csv2的行放入csv中,如果数据不匹配则附加状态。

我是python的新手,无法找出下面的代码有什么问题。请提供最佳解决方案以及此代码有什么问题。

Python 2.7或更高版本

f1 = file('db1.csv','r')
f2 = file('db2.csv', 'r')
f3 = file('output.csv', 'w')
c1 = csv.reader(f1)
# web _csv
c2 = csv.reader(f2)
# database csv
c3 = csv.writer(f3)
#result or output csv
dblist = map(tuple,c2)

for web_row in c1:
    row = 1
    for db_row in c2:
        if db_row[15] == web_row[15]:
            results_row = web_row                             
            for i in izip(web_row,db_row):
                if id(i[0]) == id(i[1]):
                    results_row.append('Matched!')
                    row = row + 1
                else:
                    results_row.append('FAILED MATCH, for {}: expected value is {} but actual is {}'.format(web_row[15],i[1],i[0]))
c3.writerow(results_row) 

f1.close()
f2.close()
f3.close()

csv1 enter image description here

csv2: enter image description here

1 个答案:

答案 0 :(得分:0)

我喜欢可能是您遇到的问题。在这一行:results_row = web_row中,您没有完成我想做的事情。

您正在做的是创建对web_row的引用,因此您可以使用来自其他名称(results_row)的呼叫来更改它。我想您想制作一个副本,以使与results_row混乱不会影响web_row

为此,您可以导入copy模块并将该(results_row = web_row)行替换为:

import copy

....

results_row = copy.copy(web_row)  

这应该使您更接近所需的内容。