0

我正在使用一个库来推断两个 json 文件之间的差异。我的代码将它们加载到字典中,然后使用datadiff来获取两种数据结构之间的差异。问题是我想进一步处理以下输出:

datadiff.diff

制作两个数据结构中发现的差异的 html。为了做到这一点,我必须处理命令的输出并将其分成几行。然后,如果行以 + 开头,我知道输出必须引用到比较的第二个文件,如果行以 - 开头,那么我必须将其归因于第一个文件。我的代码:

    out = datadiff.diff(t[0].get("key"),t[1].get("key"))
    for line in out:
        if str(line).startswith("+"):
            f.write(str(line)+"<br/>")
        if str(line).startswith("-"):
            f.write(str(line)+"<br/>")

这段代码给我一个 TypeError:

for line in out:
TypeError: 'DataDiff' object is not iterable

我可以将整个 datadiff.diff 转换为一个字符串,但随后我必须以某种方式拆分它以获取所有行,因为它被转换为单行字符串:

         out = str(datadiff.diff(t[0].get("key"),t[1].get("key")))+"<br/>"

数据差异输出:

diff in key:
--- a
+++ b
[
@@ -0,1 +0,1 @@
-{u'origin': u'NORMAL', u'score': 100, u'type': u'FEELINGS', u'name': u'sentiment negativo', u'children': [u'reato']},
 {u'origin': u'NORMAL', u'score': 100, u'type': u'FEELINGS', u'name': u'sentiment neg', u'children': [u'reato']},
+{u'origin': u'NORMAL', u'score': 50, u'type': u'FEELINGS', u'name': u'sentiment negativo', u'children': [u'reato']},
]
4

1 回答 1

2

您可以查看方法的源代码DataDiff.stringify(),您可以在其中看到如何从.diffs列表中生成输出:

def output(ddiff, f, depth=0):
    for change, items in out.diffs:
        if change in ('insert', 'delete'):
            prefix = '-' if change == 'delete' else '+'
            for line in items:
                f.write('{}{}{}<br/>'.format(prefix, depth * ' ', line))
        elif change == 'datadiff':
            output(items, f, depth + 1)
            f.write(',')

output(out, f)

如果您只想使用字符串输出,请再次使用str.splitlines()来获取单独的行:

for line in str(out).splitlines():
    # etc.
于 2013-10-29T11:26:52.933 回答