簡體   English   中英

如何在python中計算Diff

[英]How calculate Diff in python

我有兩個字符串: stringAstringB

我想計算stringAstringB之間的差異,使其僅包含兩者之間的差異。 如果我在stringA上應用差異,我應該能夠得到stringB

在 python 中有difflib ,但它不像上面的計算機 diff 它幾乎保存了兩個字符串的內容。

例子:

stringA = "apple\nball\n"
stringB = "apple\ncat\n"

現在差異應該看起來像-2,+2cat\\n ,它只是一個例子,但我希望差異是最少的信息。

現在,如果我將上述差異應用於stringA我應該得到stringB

您可以使用difflib庫來做到這一點。 看看unified_diff函數。

使用標准庫中的difflib.unified_diff

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...     sys.stdout.write(line)   
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
guido

如果您不想要上下文,只需將n=0傳遞給difflib.unified_diff()來抑制它:

>>> import difflib
>>> a = ['line 1\n', 'line 2\n', 'line 3']
>>> b = ['line 1\n', 'line 5\n', 'line 3']
>>> delta = list(difflib.unified_diff(a, b, n=0))
>>> delta
['--- \n', '+++ \n', '@@ -2 +2 @@\n', '-line 2\n', '+line 5\n']

您可以通過使用gzip或其他算法對其進行壓縮來進一步減小輸出大小。

不幸的是,Python 沒有提供恢復統一差異的方法。 您可以編寫自己的代碼(這並不難)或使用網絡上現有的庫之一(例如python-patch )。

您還可以使用大多數 Unix 系統上可用的patch(1)工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM