python中difflib库用法详解-程序员宅基地

技术标签: python  difflib  

        Difflib作为python的标准库,无需安装,作用是对比文本之间的差异,而且支持输出可读性比较强的HTML文档,与Linux下的vimdiff命令相似。

官方文档:difflib — Helpers for computing deltas — Python 3.10.8 documentation

difflib.Differ类

示例代码:

import difflib

text1 = 'aaa\nbbb\ncc'
text2 = 'aa\nbbb\nccc'

# 创建Differ对象
d = difflib.Differ()
res = list(d.compare(text1, text2))
print(res)

运行结果:

注释:

difflib.HtmlDiff类 

示例代码:  【当内容复杂后,结果不准确】

import difflib


# 读取文件内容
def read_file(file_name):
    with open(file_name, 'r', encoding='utf-8') as f:
        text = f.read().splitlines()
        return text


# 比较两个文件的区别,并生成一个html文件
def compare_file(file_1, file_2):
    text1_lines = read_file(file_1)
    text2_lines = read_file(file_2)

    # 创建HtmlDiff对象
    diff = difflib.HtmlDiff()
    # 通过make_file方法输出html格式的对比结果
    result = diff.make_file(text1_lines, text2_lines)
    # 将结果写入到result_compare.html文件中
    try:
        with open('result_compare.html', 'w', encoding='utf-8') as result_file:
            result_file.write(result)
    except IOError as error:
        print(error)


if __name__ == '__main__':
    compare_file('text.txt', 'text.2txt')

运行结果:

difflib.SequenceMatcher()

示例代码:

import difflib

text1 = 'aaa\nbbb\ncc'
text2 = 'aa\nbbb\nccc'

# 判断两个文档相似度
res = difflib.SequenceMatcher(None, text1, text2).quick_ratio()
print(res)

运行结果:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44799217/article/details/127476692

智能推荐

Froont!在线可视化响应式网页设计工具-程序员宅基地

文章浏览阅读1.4k次。Home / 热门下载 /神器下载 / 正文更多44今天要推荐的神器来自http://froont.com/ ,猜猜它有神马强悍的功能呢?是滴,进入网站后,你就会看到他说:“原来还可以在浏览器里设计网页,仅仅只需要拖放即可!”Froont是一个允许设计师在线设计响应式网页的工具,不需要程序员介入的设计编程工具,为设计师们提供了可视化

15:jquery正则表达式_jqzfz-程序员宅基地

文章浏览阅读167次。1:常见的字符介绍1:\ 转义字符 \n 匹配的就是换行 \ 匹配的是\ ( 匹配的是(。2 :^ 代表的是 开始符号 匹配字符的开始 或者正则表达式的开始。3: $ 代表的是 结束符号 匹配字符的结束 或者正则表达式的结束。4:* 代表的是匹配前面的字表达式零次或多次 zooo zo* 等价于 {0,}。5: + 代表的是匹配前面的字表达式一次..._jqzfz

android 动态加载 view,Android_Android动态添加View的问题解决方法,后台代码复制代码 代码如下:&n - phpStudy...-程序员宅基地

文章浏览阅读97次。Android动态添加View的问题解决方法后台代码private void ChangeView(){ly.removeAllViews();LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);View layout = inflater.inflate(R.layout.grid..._android addview 源码

一步一步学习OCS2007(一)--如何定制在线状态?-程序员宅基地

文章浏览阅读48次。  OCS 2007(即Microsoft Office Communicators Server 2007) 是微软2007年推出的一款非常重要的即时通讯软件,她汇集了多方即时通讯、多方语音聊天、多方视频会议等众多功能,同时还提供了强大的二次开发接口,以便用户进一步去扩展、去开拓。  下面,我将逐惭就OCS2007二次开发过程中的一些体会,感受表达出来,与读者共享。  今天的主题是,用户..._ocs flow过站状态

Linux底层IIC 总线的理解、调用函数以及常见面试问题_linux iic 只有一次起始信号-程序员宅基地

文章浏览阅读830次。对 IIC 总线的理解、调用函数以及常见面试问题一、IIC 总线概述:IIC 即Inter-Integrated Circuit(集成电路总线)I2C总线是PHLIPS公司推出的一种串行总线, I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 每个接到I..._linux iic 只有一次起始信号

三层架构之间的相互关系_三层架构的引用关系-程序员宅基地

文章浏览阅读4.6k次。一般讲到三层架构,其实就是将整个业务应用划分为表示层、业务逻辑层、数据访问层等。 数据访问层DAL,业务逻辑层BLL。表现层UI (界面类的)【 model(数据模型层,主要放的我就不用说了。一般都是数据库中的。) ,】model是贯穿的。所有的都引用它,bll引用dal ui引用dal 和bll 然后就是调用 三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三_三层架构的引用关系

随便推点

Android9.0 原生系统SystemUI下拉状态栏和通知栏视图之锁屏通知布局_安卓12 systemui试图-程序员宅基地

文章浏览阅读1k次。在9.0的系统rom定制化开发中,对于系统原生systemui的锁屏界面的功能也是非常重要的,所以在锁屏页面布局中,也是有通知栏布局的,所以接下来对于息屏亮屏通知栏布局的相关流程分析,看下亮屏后锁屏页面做了哪些功能_安卓12 systemui试图

什么是BSD协议_违反bsd协议什么后果-程序员宅基地

文章浏览阅读1k次。BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD协议的代码,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。 BSD代码鼓励代码共享,但需要尊重代码作_违反bsd协议什么后果

怎么在Linux下执行sql文件_.sql文件怎么执行-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏2次。第一步 : 登录数据库 mysql -u root -p第二步 :选择数据库 use databses第三步 :执行sql文件 source /路径/xxx.sql_.sql文件怎么执行

[CDH 6.3.X] clouder manager 6.3.2 、CDH 6.3.1、安装过程_cloudera manager 安装失败 无法复制安装文件-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏4次。文章目录硬件准备虚拟机方案硬盘分区方案/bootswarp分区/网络配置配置vmware的虚拟网络配置Win10的网络配置虚拟机的网卡配置通过ssh工具连接虚拟机克隆虚拟机部署注意事项配置网络名称关闭防火墙设置 SELinux 模式启用NTP服务安装python2.7或更低版本CDH需要占用的端口安装http搭建本地http服务配置CDH本地存储库安装Cloudera Manager配置mysql安装CDH硬件准备虚拟机方案硬盘分区方案/boot装载系统启动引导程序的_cloudera manager 安装失败 无法复制安装文件

2017蓝桥杯B模拟题K倍区间_给定一个长度为n的数列,a1, a2, ... an,如果其中一段连续的子序列ai, ai+1, .-程序员宅基地

文章浏览阅读288次。题目: k倍区间给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。 你能求出数列中总共有多少个K倍区间吗? 输入-----第一行包含两个整数N和K。(1 <= N, K <= 100000) 以下N行每行包含一个整数Ai。(1 <= Ai &..._给定一个长度为n的数列,a1, a2, ... an,如果其中一段连续的子序列ai, ai+1, ... a

《TensorFlow机器学习实战指南》学习笔记一_向目标值优化-程序员宅基地

文章浏览阅读520次。实现一个简单函数 声明a和b为变量,x为占位符。向目标值50优化输出结果。 代码如下:import tensorflow as tfimport numpy as npsess=tf.Session()a=tf.Variable(tf.constant(1.))b=tf.Variable(tf.constant(1.))x_val=10.x_data=tf.placehold..._向目标值优化