是否有任何比较方法或选项可以从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
如果需要,应该很容易从中提取最后两行。