首页 > 解决方案 > 比较忽略某些字符的行与 difflib

问题描述

我有一个input.txt和一个output.txt。输出文件只是Line1\r\n; 输入文件只是Line1\n(按照您期望的方式编写,我只是无法在此处显示 windows/unix 换行符)。

我正在努力difflib.ndiff报告文件是相同的。

我知道我可以通过参数告诉它忽略某些字符charjunk。默认情况下,它设置为通过difflib.IS_CHARACTER_JUNK(ch).

我查看了源代码IS_CHARACTER_JUNK()

def IS_CHARACTER_JUNK(ch, ws=" \t"):
    return ch in ws

我制作了自己的版本,并将 ndiff 设置为使用它,在a.py

from difflib import ndiff

def windows_newlines_charjunk(ch):
    return ch in "\r"

with open("input.txt", "r") as f:
    input = f.readlines()
with open("output.txt", "r") as f:
    output = f.readlines()

diff = ndiff(input, output, charjunk=windows_newlines_charjunk)
print("".join(list(diff)))

当我运行时python2 a.py,我得到:

- Line1
+ Line1
?      +

这是ndiff 的代码看到了这两行之间的差异,并试图引起您对差异的注意。如果区别是空格,这会显得很混乱

我如何才能ndiff理解 windows 与 unix 换行符没有区别?

标签: pythondifflib

解决方案


推荐阅读