gpt4 book ai didi

python - python 中的 "diff -u -B -w"?

转载 作者:太空狗 更新时间:2023-10-29 19:29:15 25 4
gpt4 key购买 nike

使用 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”。

最佳答案

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

关于python - python 中的 "diff -u -B -w"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31752714/

25 4 0