1. 什么是difflib? 用来做什么?

difflib为python的标准库模块,无需安装。作用时对比文本之间的差异。
并且支持输出可读性比较强的HTML文档,与LInux下的diff 命令相似。
在版本控制方面非常有用。

2. 符号理解

符号 含义
‘-’ 包含在第一个系列行中,但不包含第二个。
‘+’ 包含在第二个系列行中,但不包含第一个。
’ ’ 两个系列行一致
‘?’ 存在增量差异
‘^’ 存在差异字符

看Differ的源代码中的例子:
python-difflib文本对比

import difflib
text1 = '''  1. Beautiful is better than ugly.
       2. Explicit is better than implicit.
       3. Simple is better than complex.
       4. Complex is better than complicated.
     '''.splitlines(keepends=True)

text2 = '''  1. Beautiful is better than ugly.
       3.   Simple is better than complex.
       4. Complicated is better than complex.
       5. Flat is better than nested.
     '''.splitlines(keepends=True)

# 实现linux里面的diff命令的功能;
d = difflib.Differ()
print(list(d.compare(text1, text2)))

输出:

['    1. Beautiful is better than ugly.\n', '-        2. Explicit is better than implicit.\n', '-        3. Simple is better than complex.\n', '+        3.   Simple is better than complex.\n', '?          ++\n', '-        4. Complex is better than complicated.\n', '?                 ^                     ---- ^\n', '+        4. Complicated is better than complex.\n', '?                ++++ ^                      ^\n', '+        5. Flat is better than nested.\n', '       ']

这样看对比不明显:
最后打印改为print("".join(list(d.compare(text1, text2))))
python-difflib文本对比转为html对比更明显:

d = difflib.HtmlDiff()
htmlContent = d.make_file(text1, text2)

with open('doc/diff.html', 'w') as f: # 写成html文件
    f.write(htmlContent)

在新生成的html文件中,点击右上角的火狐等浏览器,就可以看见不同。
python-difflib文本对比python-difflib文本对比完整代码:

import difflib
text1 = '''  1. Beautiful is better than ugly.
       2. Explicit is better than implicit.
       3. Simple is better than complex.
       4. Complex is better than complicated.
     '''.splitlines(keepends=True)

text2 = '''  1. Beautiful is better than ugly.
       3.   Simple is better than complex.
       4. Complicated is better than complex.
       5. Flat is better than nested.
     '''.splitlines(keepends=True)

# 实现linux里面的diff命令的功能;
# d = difflib.Differ()
# print("".join(list(d.compare(text1, text2))))

d = difflib.HtmlDiff()
htmlContent = d.make_file(text1, text2)

with open('doc/diff.html', 'w') as f:
    f.write(htmlContent)

相关文章:

  • 2021-12-26
  • 2021-12-14
  • 2022-12-23
  • 2022-12-23
  • 2021-12-01
  • 2021-08-16
  • 2021-11-13
  • 2022-02-21
猜你喜欢
  • 2021-08-29
  • 2021-11-28
  • 2021-08-19
  • 2021-10-08
  • 2021-12-13
  • 2021-07-01
  • 2022-12-23
相关资源
相似解决方案