用python推断差异

2024-05-20 05:10:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用一个库来推断两个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/>")

此代码给我一个类型错误:

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

我可以改变整个世界数据差异在一个字符串中,但我必须以某种方式拆分它,以便在将其转换为一个单行字符串时获得所有行:

         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']},
]

Tags: 文件key代码inbrgetlinediff
1条回答
网友
1楼 · 发布于 2024-05-20 05:10:12

您可以查看source for the ^{} method,在那里您可以看到如何从.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)

如果只想处理字符串输出,请使用^{}再次获得单独的行:

for line in str(out).splitlines():
    # etc.

相关问题 更多 >