如何计算 python 中的差异
How calculate Diff in python
我有两个字符串:stringA 和 stringB。
我想计算 stringA 和 stringB 之间的差异,这样它只包含两者之间的差异。如果我在 stringA 上应用差异,我应该能够得到 stringB。
在python中有difflib
,但它并没有像上面那样计算差异它几乎保存了两个字符串的内容。
示例:
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)
工具。
我有两个字符串:stringA 和 stringB。
我想计算 stringA 和 stringB 之间的差异,这样它只包含两者之间的差异。如果我在 stringA 上应用差异,我应该能够得到 stringB。
在python中有difflib
,但它并没有像上面那样计算差异它几乎保存了两个字符串的内容。
示例:
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)
工具。