2013-11-04 41 views
0

我試圖使用庫的輸出:Datadiff但diff的輸出,似乎並不一致。我正在分析兩個json,從它們中提取一些字典,然後比較這些字典。但是,對於該第一文件的輸出顯示的所有對象變化,而在第二個文件的輸出處於線,所以其不是被顯示相同的,但不是全部的對象改變了JSON的線保持在DIFF一個謎。我很困惑這種行爲,你能解釋我還是解決這個問題?下面是代碼:Datadiff的差異並不一致

+{u'origin': u'VIRTUAL', u'score': 1, u'type': u'PLACES', u'name': u'comune di Roma'}, 
+{u'origin': u'VIRTUAL', u'score': 1, u'type': u'PLACES', u'name': u'provincia di Roma'}, 

第二個文件DIFF:

-u'position': 1,: 
    u'score': 1,: 
    u'score': 1,: 
    u'score': 1,: 

我想選擇所有

out = datadiff.diff(t[0].get("key"),t[1].get("key")) 
    if options.get("key2") != None: 
     out = scorecheck(out,options.get("key2")) 
    if checkdiff(str(out)): 
     f.write("Feelings:<br/>") 
     printdiff(f, str(out)) 

從第一個文件的差異輸出包含分數1的「對象」,而不僅僅是在json中表示分數1的行。所以對我來說第一個輸出是可以的,第二個是沒用的。

+1

您能向我們展示第一個和第二個文件的示例嗎? – aIKid

+0

Datadiff似乎只適用於Python結構,而不適用於文件。所以我不明白你的文件格式與它有什麼關係。你應該看看你的字典。 – Evert

+0

文件是彼此非常不同的,我不得不使用兩個字典包含存儲在JSON以有序的方式的數據。這樣比較容易製作兩個文件的差異並讀取它。 – softwareplay

回答

0

Datadiff不是diff文件的神聖的書,特別是對於蟒蛇結構比較差異。您可以構建您喜歡的功能,以便製作您需要的差異,個性化,並且非常容易。這個網站上有很多例子。許多人喜歡用新的方式構建一個diff,而不是使用datadiff庫(甚至沒有很好的記錄)。 所以下面是代碼的一個例子,以製作兩個字典列表的差異。它返回一個dict列表的列表,第一個包含第一個文件的差異,第二個比較第二個文件的差異。在html文件中打印不同顏色的兩個列表是有用的:

def listdiff(listofdict1,listofdict2): 
listofdict3 = [] 
listofdict4 = [] 
for i in listofdict1: 
    if i not in listofdict2: 
     listofdict3.append(i) 
for j in listofdict2: 
    if j not in listofdict1: 
     listofdict4.append(j) 
return [listofdict3,listofdict4]