首页 > 解决方案 > 如何仅从 libdiff 比较结果中过滤 delta?

问题描述

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

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

标签: python

解决方案


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

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

from itertools import islice
from difflib import unified_diff

s1 = ['line1\n', 'line2\n', 'line3\n']
s2 = ['line1\n', 'lineX\n', 'line3\n']

print(''.join(islice(unified_diff(s1, s2, fromfile='', tofile='', n=0), 3, None)))

输出:

-line2
+lineX

推荐阅读