我正在使用一个库来推断两个json文件之间的差异。我的代码将它们加载到字典中,然后使用datadiff来获取两个数据结构之间的差异。问题是我想进一步处理输出:
datadiff.diff
制作在两个数据结构中找到的差异的html。为了做到这一点,我必须处理命令的输出并将其划分为行。然后,如果行以+开头,我知道输出必须被引用到比较的第二个文件,如果行开头 - 那么我必须将它归因于第一个文件。 mycode的:
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/>"
Datadiff输出:
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']},
]
答案 0 :(得分:2)
您可以查看source for the DataDiff.stringify()
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)
如果您只想使用字符串输出,请使用str.splitlines()
再次获得单独的行:
for line in str(out).splitlines():
# etc.