【问题标题】:CSV comparison using a column value使用列值进行 CSV 比较
【发布时间】:2019-07-19 16:44:46
【问题描述】:

我正在尝试比较两个 csvs 中的数据。 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

【问题讨论】:

  • 你能概述一下你的代码做错了什么吗?也许给我们一个你正在使用的数据文件的小样本和你当前代码的输出。
  • @Hoog:谢谢您的回复,代码在 output.csv 中返回空白 csv。请找到两个文件的样本。在两个 csv 文件中,列的顺序相同。

标签: python


【解决方案1】:

我喜欢的东西可能是你的问题。在这一行: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)  

这应该让你更接近你正在寻找的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多