" diff -u -B -w"在python?

时间:2015-07-31 18:23:24

标签: python difflib

使用Python,我希望将两个字符串之间的差异输出为统一差异(-u),同时可选地忽略空行(-B)和空格(-w)。

由于字符串是在内部生成的,我宁愿不处理将一个或两个字符串写入文件,运行GNU diff,修复输出,最后清理的细微差别。

虽然difflib.unified_diff生成了统一的差异,但似乎并没有让我调整空格和空行的处理方式。我已经看过它的实现,我怀疑,唯一的解决方案是复制/破解该功能的主体。

有什么更好的吗?

目前我正在使用以下内容删除打击垫字符:

import difflib
import re
import sys

l = "line 1\nline 2\nline 3\n"
r = "\nline 1\n\nline 2\nline3\n"
strip_spaces = True
strip_blank_lines = True

if strip_spaces:
    l = re.sub(r"[ \t]+", r"", l)
    r = re.sub(r"[ \t]+", r"", r)
if strip_blank_lines:
    l = re.sub(r"^\n", r"", re.sub(r"\n+", r"\n", l))
    r = re.sub(r"^\n", r"", re.sub(r"\n+", r"\n", r))
# run diff
diff = difflib.unified_diff(l.splitlines(keepends=True), r.splitlines(keepends=True))
sys.stdout.writelines(list(diff))
当然,

会导致输出为除原始输入之外的某种东西的差异。例如,将上面的文本传递给GNU diff 3.3,运行为" diff -u -w"和"第3行"显示为上下文的一部分,上面将显示" line3"。

1 个答案:

答案 0 :(得分:1)

制作您自己的SequenceMatcher,复制unified_diff正文并将SequenceMatcher替换为您自己的匹配器。