2012-10-26 32 views
0

如何創建兩個json對象的差異,使它們處於手動比較格式,可以將其發送到評論板?我需要從python腳本內部生成diff。我認爲手動diff是使用「diff file1 file2」命令行實用程序生成的。我可以使用difflib生成類似的兼容reviewboard的diff嗎?還是有另一個我需要使用的庫?謝謝!如何在兩個可以使用python發送到Reviewboard的Json對象之間創建手動差異?

+2

我不知道reviewboard採用的格式,但是如果區分JSON,請確保按照特定的定義順序發出鍵以獲得最佳結果(這將根據JSON生成器而變化,因爲字典在技術上是無序的) 。 – 2012-10-26 03:19:16

+0

感謝您的提示! python中有沒有內置的diff庫,你會建議嗎?會像difflib.context_diff工作? – user1427026

+0

只要添加評論板使用Myers Diff,我認爲他們應該能夠處理顯示我的並排json diff,一旦我給他們一個prudely生成的手動差異。然而,我不能找出我需要發送它們的格式:((python相當於命令行diff我猜)鍵提示是有用的,但因爲它的JSON和不是文本差異我會記住​​我的JSON差異按預期生成! – user1427026

回答

1

使用difflib:

def show_diff(seqm): 
    output= [] 
    for opcode, a0, a1, b0, b1 in seqm.get_opcodes(): 
     if opcode == 'equal': 
      output.append(seqm.a[a0:a1]) 
     elif opcode == 'insert': 
      output.append("<ins>" + seqm.b[b0:b1] + "</ins>") 
     elif opcode == 'delete': 
      output.append("<del>" + seqm.a[a0:a1] + "</del>") 
     elif opcode == 'replace': 
      output.append("<del>" + seqm.a[a0:a1] + "</del>" + "<ins>" + seqm.b[b0:b1] + "</ins>") 
     else: 
      raise RuntimeError, "Unexpected opcode" 
    return ''.join(output) 

在你的情況,你比較你的JSON文件(我只是用虛擬文本):

In [4]: sm = difflib.SequenceMatcher(None, 'hello', 'hello world') 

In [6]: diff = show_diff(sm) 

In [7]: diff 
Out[7]: 'hello<ins> world</ins>' 

看那documentation如果你需要從difflib的不同輸出

+0

感謝羅布,我會給這個去! – user1427026

+0

希望它有助於:-) –

1

我只是想通過diff之前,你應該重新格式化JSON對象讓我們說按字母和數字順序。

相關問題