2015-02-06 12 views
0

我有兩個CSV文件,我試圖比較。我已經閱讀過他們使用字典讀者。所以現在我有兩個CSV文件的字典(每行一個)。我想比較它們,比如當兩個元素(標題爲h1和h2的元素)相同時,比較這些字典並打印出與第二個字典相關的差異。這裏是示例csv文件。python比較來自兩個csv文件的dict閱讀器元素

csv1:

h1,h2,h3 
aaa,g0,74 
bjg,73,kg9 

CSV_new:

h1,h2,h3,h4 
aaa,g0,7, 
bjg,73,kg9,ahf 

我所要的輸出是這樣的,雖然不完全一樣如下圖所示,我希望它能夠打印出修改,每個字典中關於CSV_new的添加和刪除:

{h1:'aaa', h2:'g0' {h3:'74', h4:''}} 
{h1:'bjg', h2:'73' {h4:''} 

我的代碼,不夠發達。

import csv 
f1 = "csv1.csv" 
reader1 = csv.DictReader(open (f1), delimiter = ",") 
for row1 in reader1: 
    row1['h1'] 
#['%s:%s' % (f, row[f]) for f in reader.fieldnames] 
f2 = "CSV_new.csv" 
reader2 = csv.DictReader(open (f2), delimiter = ",") 
for row2 in reader2: 
    row2['h1'] 
if row1['h1'] == row2['h1']: 
    print row1, row2 
+1

我非常困惑你的預期輸出。 – 2015-02-06 19:55:30

+0

我很抱歉我的糟糕解釋。我想要的只是兩個文件之間的區別,以及標題名稱。 @AdamSmith – abn 2015-02-06 19:56:59

+0

基本上你問如何比較字典 - 它們是如何被創建的是不相關的 - 所以我建議你[搜索](http://stackoverflow.com/search?q= [python] +比較+字典)提出有關該主題的問題和答案。 – martineau 2015-02-06 21:29:55

回答

1

如果你只是想找到差異,你可以使用difflib 作爲一個例子: import difflib fo1 = open(csv) fo2 = open(CSV_new) diff =difflib.ndiff(fo1.readlines(),fo2.readlines()) 然後,只要你想

0

這可能是你在找什麼,你可以寫的差別,但如前所述以上在你的描述中有一些含糊不清的地方。

with open(A) as fd1, open(B) as fd2: 
    a, b = csv.reader(fd1), csv.reader(fd2) 
    ha, hb = next(a), next(b) 
    if not set(ha).issubset(set(hb)): 
     sys.exit(1) 

    lookup = {label : (key, hb.index(label)) for key, label in enumerate(ha)} 
    for rowa, rowb in zip(a, b): 
     for key in lookup: 
      index_a, index_b = lookup[key] 
      if rowa[index_a] != rowb[index_b]: 
       print(rowb) 
       break