python - 比较忽略某些字符的行与 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 换行符没有区别?
解决方案
推荐阅读
- kotlin - 项目属性更改时如何更新 ItemFragment
- reactjs - React redux-strange 行为,prevState 和 newState 一起改变
- docker - Docker-compose 无法连接到 WSL 上的 jupyter notebook
- ruby - sudo gem instal sass 给我这个错误:错误:无法构建 gem 本机扩展
- python - 在 Python 中读取多个文件并使用字符串重命名它们 - str(i+1) 不起作用?
- azure - 使用 Azure DevOps 跨环境部署 Azure 资源
- c# - 从数据库中创建一个 ID 列表。C#
- python - 来自 Python BufferedIO 对象的 C `FILE` 流
- nginx - 如何为在不同端口上的同一台机器上运行的 2 个应用程序配置 Nginx 反向代理
- javascript - 循环遍历对象的对象