Python 如何做文本对比?超全实战教程(精准比对+相似度+可视化差异)
前言
在工作中我们经常需要文本对比场景:
- 对比两份文档、配置文件差异
- 自动化测试校验返回文本变更
- 文本查重、模糊匹配相似度
- 自动找出哪里删改、哪里新增
Python 内置强大的文本比对工具,无需复杂算法,几行代码即可实现专业级文本对比。
本篇博客涵盖:精准逐行对比、差异可视化、文本相似度计算、模糊匹配,全部可直接运行。
一、最简单对比:精准全等判断
适合场景:只判断是否一模一样,不需要看差异
代码示例
a="今天学习Python文本对比"b="今天学习Python文本对比"c="今天学习Python教程"print(a==b)# Trueprint(a==c)# False业务常用:忽略大小写/空格
defclean_text(s):returns.replace(" ","").lower()print(clean_text(a)==clean_text(c))优点:超快、零依赖
缺点:看不到具体哪里不一样
二、专业对比:Python内置 difflib(查看详细差异)
Python 自带difflib标准库,是文本对比神器,可以精准输出:
- 删除的行
- 新增的行
- 修改的内容
2.1 逐行文本差异对比
importdifflib text1="""第一行内容 第二行内容 第三行内容 """text2="""第一行内容 第二行【已修改】 第三行内容 第四行新增内容 """# 分割成行lines1=text1.splitlines(keepends=True)lines2=text2.splitlines(keepends=True)diff=difflib.Differ()result=diff.compare(lines1,lines2)print("".join(list(result)))输出标识说明
-旧文本存在、新文本删除+新文本新增内容- 无符号:内容一致
三、生成可视化对比网页(超实用)
difflib可以一键生成HTML对比页面,带颜色高亮,可直接浏览器打开。
importdifflib text1="""1、Python基础 2、Python爬虫 """text2="""1、Python基础 2、Python数据分析 3、Python人工智能 """diff=difflib.HtmlDiff()html=diff.make_file(text1.splitlines(),text2.splitlines(),fromdesc="旧文本",todesc="新文本")withopen("diff.html","w",encoding="utf-8")asf:f.write(html)print("对比网页已生成!")运行后打开diff.html,即可看到:
- 红色:删除内容
- 绿色:新增内容
- 左右分栏对比
非常适合工作汇报、自动化测试报告。
四、文本相似度对比(查重、模糊匹配)
很多场景不是判相等,而是判相似度,例如文章查重、语句匹配。
代码实现
importdifflib s1="Python文本对比教程"s2="Python文本比对教程"s3="Java开发教程"m1=difflib.SequenceMatcher(None,s1,s2)m2=difflib.SequenceMatcher(None,s1,s3)print("s1-s2 相似度:",round(m1.ratio(),2))print("s1-s3 相似度:",round(m2.ratio(),2))输出:
s1-s2 相似度: 0.92 s1-s3 相似度: 0.15可以结合阈值实现智能查重:
- 相似度>0.8:判定为高度相似
- 相似度<0.3:判定为完全不同
五、高级模糊匹配(fuzzywuzzy)
原生库精度有限,工业级模糊匹配推荐fuzzywuzzy
安装
pipinstallfuzzywuzzy python-Levenshtein代码
fromfuzzywuzzyimportfuzz a="我喜欢Python文本对比"b="我非常喜欢Python文本对比技术"print(fuzz.ratio(a,b))# 整体相似度print(fuzz.partial_ratio(a,b))# 局部匹配print(fuzz.token_sort_ratio(a,b))# 无序词语匹配适合:短句对比、文案查重、OCR文本比对、搜索匹配。
六、各种对比方案选型总结
| 方案 | 特点 | 适用场景 |
|---|---|---|
| 字符串 == | 极速精准 | 简单一致校验 |
| difflib.Differ | 查看行差异 | 文档/代码对比 |
| difflib.HTML | 可视化对比 | 生成对比报告 |
| SequenceMatcher | 相似度打分 | 简单查重 |
| fuzzywuzzy | 超强模糊匹配 | 文案、短句查重匹配 |
总结
- 精准一致判断直接用
== - 需要看差异、改了哪里用内置
difflib - 需要可视化报告用 HtmlDiff 生成网页
- 查重、模糊匹配用 SequenceMatcher / fuzzywuzzy
Python 文本对比完全可以零算法基础实现,覆盖 99% 工作场景。
