Python——difflib模块(对比文件差异)

difflib简介

我们知道,在shell中,可以直接使用vimdiff命令比对文本。

 vimdiff  a.txt  b.txt 

在Python中如何对比文件差异呢?
我们可以导入difflib库,difflib是python的标准库,无需安装。

  • 作用:对比文本之间的差异,而且支持输出可读性比较强的HTML文档。

常用函数

difflib.Differ()

difflib.Differ().compare(text1,text2)
可以以类似shell中的diff方法显示差异,其中符号的含义如下表:

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

示例


import difflib

a = '''
       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) # 保留换行符

b = '''
       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=False) # 不保留换行符

print(a)
print(b)

diff_content = difflib.Differ().compare(a,b)
print(''.join(diff_content))

结果:
在这里插入图片描述

difflib.HtmlDiff()

当然,上面的方式看起来并不方便,所以我们使用此方法,可以更清晰地看出差异。
difflib.HtmlDiff() 可以用于创建一个完整HTML文件,该文件显示具有行间和行内更改突出的文本的逐行比较。
difflib.HtmlDiff().make_file(a.txt,b.txt)
比较两文件并返回一个字符串,该字符串是一个完整的HTML文件,其中包含一个表格,显示逐行差异,突出显示行间和行内更改。
difflib.HtmlDiff().make_table()
比较两文件并返回一个字符串,该字符串是一个完整的HTML表格,显示逐行差异,突出显示行间和行内更改。

示例

import difflib

a = '''
       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) # 保留换行符

b = '''
       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=False) # 不保留换行符

htmlContent = difflib.HtmlDiff().make_file(a,b)

# print(htmlContent)
with open('diff.html','w+') as f:
    f.write(htmlContent)

结果:
在这里插入图片描述

import difflib

a = '''
       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) # 保留换行符

b = '''
       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=False) # 不保留换行符

htmlContent = difflib.HtmlDiff().make_table(a,b)

# print(htmlContent)
with open('diff.html','w+') as f:
    f.write(htmlContent)

结果:
在这里插入图片描述
对比之下,还是difflib.HtmlDiff().make_file()更好用一些。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值