簡體   English   中英

使用列值進行CSV比較

[英]CSV comparison using a column value

我試圖比較兩個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 在此處輸入圖片描述

csv2: 在此處輸入圖片描述

我喜歡可能是您遇到的問題。 在這一行中: 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)  

這應該使您更接近所需的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM