Python difflib的使用

news2025/1/12 1:46:11

今天做了一个从list的内容取出一个与指定内容尽可能相似的内容,做完之后抽个几分钟记录下

difflib的作用

比对2个文件的差异.

使用的时候直接 import difflib 即可

get_close_matches 作用

匹配最大相似的内容返回结果

list1 = ["abc", "acd", "adf", "bcd", "buff"]
str1 = "abc"
result = difflib.get_close_matches(str1, list1)
print(result)

打印结果:

['abc', 'bcd', 'acd']

difflib里面还有一些其他的函数如下

 context_diff 的作用

返回一个差异文本行,由于返回的是一个list看不到内容,下面的转成了string

import difflib

text1 = "abc"
text2 = "bcde"

res1 = difflib.context_diff(text1, text2)
print("".join(res1))

打印结果

 ndiff的作用

返回2个文件的差异点

import difflib

text1 = "abc"
text2 = "bcde"

res1 = difflib.ndiff(text1, text2)
print("".join(res1))

 可能看到- 和+ 感觉有点蒙,不用慌,他们的作用在下面

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

对比这个就能明白-a 表示text1中有,text2 中没有, +d,+e 表示text2中有text1中没有

ndiff 和difflib的compare作用是一样的

 下面说下difflib.Differ()的compare方法

difflib的Differ 的使用

import difflib

text1 = "abc"
text2 = "bcde"

res1 = difflib.ndiff(text1, text2)
print("".join(res1))

d = difflib.Differ()
result = d.compare(text1, text2)
print("".join(result))

打印结果

 difflib的HtmlDiff方法

import difflib

text1 = "abc"
text2 = "bcde"

res1 = difflib.ndiff(text1, text2)
print("".join(res1))
# Differ 比较差异
d = difflib.Differ()
result = d.compare(text1, text2)
print("".join(result))
# HtmlDiff 统计差异
d1 = difflib.HtmlDiff()
res2 = d1.make_file(text1, text2)
# 把比对结果写入到html中
with open("diff.html", "w") as f:
    f.write(res2)

在代码的同目录下找到diff.html 用浏览器代码

 很明显的就能看到差异了

difflib的SequenceMatcher 方法

import difflib

text1 = "abc"
text2 = "bcde"

res1 = difflib.ndiff(text1, text2)
print("".join(res1))
# Differ 比较差异
d = difflib.Differ()
result = d.compare(text1, text2)
print("".join(result))
# HtmlDiff 统计差异
d1 = difflib.HtmlDiff()
res2 = d1.make_file(text1, text2)
# 把比对结果写入到html中
with open("diff.html", "w") as f:
    f.write(res2)
# 2个文件的相似对
res3 = difflib.SequenceMatcher(None, text1, text2).quick_ratio()
print(res3)

打印结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NIO编程

目录 1、什么是NIO编程? 为什么说Java NIO是非阻塞的? 2、Java NIO 通道(Channel)详解 如何获取Channel对象? 3、Java NIO 缓冲区(Buffer)详解 (1)获取缓冲区对象 (2)将数据写入Buffer以…

没学过编程,本科学历,Java学到什么程度才能找工作?

好程序员之前写过多篇Java找工作方面的文章,今天说说零Java基础找工作的事情。首先请大家明确如下的要点。 1、在没有真实Java工作项目经验的前提下,靠自学,哪怕到培训班学,一定是无法真正掌握到能干Java项目的地步,原…

SpringData 基础篇

Spring Data 故事背景一:基础概念1.1 什么是SpringData1.2 为什么要用SpringData 二:JPA与Hibernate、MyBatis关系2.1 JPA与JDBC2.1.1 特点2.1.2 JPA规范提供2.1.3 JDBC的不足 2.2 Hibernate与JPA2.2.1 关系 2.3 mybatis 和Hibernate 三:Hibe…

裁剪与复原

目录 模型假设 模型建立 模型求解 通过建立匹配模型实现对破碎文件的拼接复原。 模型假设 模型建立 首先对每个图片按像素值进行二值化量化,可以得到19个1980*72的矩阵,再提取每个举证最左和最右的像素值采用绝对距离法建立像素匹配模型。 二值化是图…

大数据时代——生活、工作与思维的重大变革

最近读了维克托迈尔 – 舍恩伯格的《大数据时代》,觉得有不少收获,让我这个大数据的小白第一次理解了大数据。 作者是大数据的元老级先驱。 放一张帅照,膜拜下。 不过这本书我本人不推荐从头读一遍,因为书中的核心理念并不是特…

Django实现接口自动化平台(二)认证授权登录【持续更新中】

上一章: Django实现接口自动化平台(一)日志功能【持续更新中】_做测试的喵酱的博客-CSDN博客 下一章: Django实现接口自动化平台(三)实现注册功能【持续更新中】_做测试的喵酱的博客-CSDN博客 一、认证与…

FineBI6.0基础学习第二课 集团毛利率下滑的原因

【案例背景】 在本期分析案例中,您将扮演一个大型商品零售集团的数据分析师,应对经理交给你的任务——发现集团毛利率下滑的原因,并给出建议; 随着您一步一步的探索分析,您将通过对商品和订单的相关历史数据的分析,逐步找出影响毛利率的关键要素,并给出相应的分析结论,…

静态误差分析

分类 随机误差、系统误差、粗大误差。 随机误差: 大部分随机误差满足正态分布,具有对称性、单峰性、有界性、抵偿性。 对称性:绝对值相等的正负误差出现的次数相等。 单峰性:绝对值越小的误差出现次数越多。 有界性&#xff1…

GIS在地质灾害危险性评估与灾后重建中的实践

第一章 基本概念与平台介绍 1、基本概念 地质灾害类型 地质灾害发育特征与分布规律 地质灾害危害特征 地质灾害孕灾地质条件分析 地质灾害诱发因素与形成机理 ​ 2、GIS原理与ArcGIS平台介绍 GIS简介 ArcGIS基础 空间数据采集与组织 空间参考 空间数据的转换与处理 …

ReID专栏(三) 注意力的应用

前言 本文中提出了一种用于行人重识别的注意感知特征学习方法。该方法由一个部分注意分支(PAB)和一个整体注意分支(HAB)组成,并与基础再识别特征提取器进行了联合优化。由于这两个分支建立在主干网络上,因此…

NumPy 数值计算基础

NumPy 数值计算基础 Numpy简介Numpy创建数组对象第一种:利用array函数创建ndarray数组第二种:利用arange函数:创建等差一维数组第三种:利用linspace函数:创建等差一维数组,接收元素数量作为参数。第三种:利用linspace函数:创建等差━维数组,接收元素数量…

剑指 Offer 18. 删除链表的节点解题思路

文章目录 题目解题思路 题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 注意:此题对比原题有改动 示例 1: 输入: head [4,5,1,9], val 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二…

Windows程序设计 学习笔记 第九章 子窗口控件

目录: 文章目录 一,按钮类1.创建子窗口拓展1——获取对话框字符尺寸的方法拓展2——获取实例句柄的方法2.子窗口传递消息给父窗口3.父窗口传递信息给子窗口拓展3 窗口句柄与ID 的相互获取① 已知窗口句柄 获取 ID②已知子窗口ID 获取 子窗口句柄 4. 按钮…

仙境传说RO怎样创建一个NPC rAthena脚本语言的hello word

仙境传说RO怎样创建一个NPC rAthena脚本语言的hello word 大家好,我是艾西。上一篇文章中我们有教大家怎么编译仙境传说RO服务端和客户端,当我们自己可以搭建架设游戏时,那么这个游戏在某种意义上就是我们说的算了。比如增加一些特色功能等&…

数据隐私为先:EMQX Cloud BYOC 架构解析

随着物联网的飞速发展,保护数据隐私和安全变得愈发重要。构建一个安全、可靠、可扩展的物联网基础设施成为企业的首要任务。 EMQ 近期推出了 EMQX Cloud BYOC,采用了以数据隐私为先的架构,为解决这些问题提供了一个理想的方案。用户可以在自…

JavaEE-Servlet的使用

目录 显示 HttpServletRequest 的常用属性获取GET请求中的query string 的内容获取 POST 请求中 body 的内容实现自动刷新构造重定向页面 显示 HttpServletRequest 的常用属性 能够返回一个页面, 显示以下内容: URL方法版本号query stringcontext path所有的 header import …

Shell脚本攻略:通配符、正则表达式

目录 一、理论 1.通配符 2.正则表达式 二、实验 1.通配符 2.正则表达式 一、理论 1.通配符 (1)概念 通配符只用于匹配文件名、目录名等,不能用于匹配文件内容,而且是已存在的文件或者目录。 各个版本的shell都有通配符&…

MySQL遇到的问题

注意:当前遇到问题都是MySQL5.7.33版本和Windows10的系统,MySQL服务的名称是MySQL57,以下出现的MySQL57只是我的MySQL服务名称,要根据自己的MySQL服务的名称来 可以通过“服务”,找到自己的MySQL服务名称,…

SpringBoot测试——高级配置

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ SpringBoot测试——高级配置 一、SpringBoot加…

电容器基础原理知识

电容器基础知识 电容器是一种储能元件,在电路中用于调谐、滤波、耦合、旁路、能量转换和延时。电容器通常叫做电容。按其结构可分为固定电容器、半可变电容器、可变电容器三种。 常用电容的结构和特点 常用的电容器按其介质材料可分为电解电容器、云母电容器、瓷介…