2013-10-29 55 views
0

我使用庫來推斷兩個json文件之間的差異。我的代碼將它們加載到字典中,然後使用datadiff來獲得兩個數據結構之間的差異。問題是,我想進一步處理輸出:用python推斷差異

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

此代碼gices我一個類型錯誤:

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

,因爲我們不知道它是什麼樣子 – ThinkChaos

+0

發佈的diff結果 – softwareplay

回答

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. 
+0

非常有幫助這個'splitlines()'方法你應該張貼的'datadiff.diff()'結果。泰 – softwareplay