2017-04-25 43 views
0

下面的實施例比較採用difflib.ndiff()difflib - 防止更換整個線的

from difflib import unified_diff, ndiff 

print("".join(ndiff(
    ["aba\n"], 
    ["abbba\n"] 
))) 

print("".join(ndiff(
    ["aba\n"], 
    ["abbbba\n"] 
))) 

輸出:

- aba 
+ abbba 
? ++ 

- aba 
+ abbbba 

第一指出其中的字符必須加入,而第二個基本上放棄並取代了整條線。

如何讓第二個打印出 的
相當於「你需要插入3「B的[這裏]。」

預期用於第二打印輸出

- aba 
+ abbbba 
? +++ 

回答

1

上是否顯示的差異的視覺高亮顯示了基於兩個串爲0.75或更高的配合比的測定。你的第一個例子是0.80,你的第二個例子沒有被高估爲0.72。

沒有提供的方法來調整此閾值 - 但difflib在純Python中實現;您可以從Python庫中複製difflib.py並將其修改爲無論您想要的行爲。 (至少在Python 2.7中,閾值接近名爲_fancy_replace的方法的頂部。)

您也可以通過用空格填充所有字符串來僞造現有的difflib,以使它們的匹配率更高。例如,如果將10個空格添加到兩個字符串中,則可以將abaabbbbbbbbbba進行比較,然後仍然可以獲得差異。

+0

非常感謝您指向'_fancy_replace',我特別喜歡通過添加空間並再次刪除它們來僞造配給的想法。 (我只是直接覆蓋'0.75',但是這可能會在更長的字符串時出現問題) –

+0

好的空間想法很麻煩,多行我正要創建difflib.py的本地副本 –

+0

我得到了它的工作。彩色difflib終於做了它應該做的。看到這裏如果感興趣:https://github.com/Farbdose/ColoredDifflib –