如何仅从 libdiff 比较结果中过滤增量?



是否有任何比较方法或选项可以从difflib返回仅具有差异的行?

到目前为止,我已经尝试了Differ, HtmlDiffer, difflib.unified_diff,即使没有区别,它们也总是从比较数据中返回所有行。

您可以使用difflib.html.difflib.unified_diff仅获取已更改的行:

上下文行的数量由 n 设置,默认为 3

from itertools import islice
from difflib import unified_diff
s1 = ['line1n', 'line2n', 'line3n']
s2 = ['line1n', 'lineXn', 'line3n']
print(''.join(islice(unified_diff(s1, s2, fromfile='', tofile='', n=0), 3, None)))

输出:

-line2
+lineX

unified_diff不会返回所有行,但它确实在上下文的两侧显示了一些行。 如果您不需要任何上下文,可以使用n=0

import difflib
a = ['unchanged', 'unchanged', 'unchanged', 'a', 'unchanged', 'unchanged']
b = ['unchanged', 'unchanged', 'unchanged', 'b', 'unchanged', 'unchanged']
[print(x) for x in difflib.unified_diff(a, b, n=0, lineterm='')]

--- 
+++ 
@@ -4 +4 @@
-a
+b

如果需要,应该很容易从中提取最后两行。

最新更新