0

ライブラリを使用して、2 つの json ファイル間の差分を推定しています。私のコードはそれらを辞書にロードし、datadiffを使用して 2 つのデータ構造の違いを取得します。問題は、次の出力をさらに処理したいということです:

datadiff.diff

2 つのデータ構造で見つかった差分の html を作成します。それを行うには、コマンドの出力を処理して行に分割する必要があります。次に、行が + で始まる場合、出力を比較する 2 番目のファイルを参照する必要があることがわかります。行が - で始まる場合は、それを最初のファイルに関連付ける必要があります。マイコード:

    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 全体を文字列に変換できますが、1 行の文字列に変換されるため、すべての行を取得するために分割する必要があります。

         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

methodのソースを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 に答える