Datadiff,diff的输出不一致

时间:2013-11-04 15:02:38

标签: python json python-2.7 diff static-libraries

我尝试使用库:Datadiff但是diff的输出似乎不一致。我正在分析两个json,从中制作一些字典然后我正在比较字典。但是对于第一个文件,输出显示所有更改的对象,而在第二个文件中输出是行,因此显示了不同的json行,但不是整个对象更改仍然是diff中的错误。我对这种行为感到很困惑,你能解释一下我或解决这个问题吗?以下是代码:

    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))

第一个文件的diff的输出:

+{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'},

来自第二个文件的差异:

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

我正在尝试选择包含得分1的所有“对象”,而不仅仅是在json中得分为1的行。所以第一个输出对我来说没问题,第二个输出没用。

1 个答案:

答案 0 :(得分:0)

Datadiff不是差异的圣书,特别是对于python结构差异。您可以构建您喜欢的功能,以实现您所需的差异化,个性化,并且很容易实现。这个网站上有很多例子。许多人更喜欢通过new而不是使用datadiff库来构建diff(甚至没有很好地记录)。 所以下面是一个代码的例子来制作两个dict列表的差异。它返回一个dict列表列表,第一个包含第一个文件的diff,第二个文件的diff比较。在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]