python difflib模块示例讲解


Posted in Python onSeptember 13, 2017

difflib模块提供的类和方法用来进行序列的差异化比较,它能够比对文件并生成差异结果文本或者html格式的差异化比较页面,如果需要比较目录的不同,可以使用filecmp模块。

class difflib.SequenceMatcher

此类提供了比较任意可哈希类型序列对方法。此方法将寻找没有包含‘垃圾'元素的最大连续匹配序列。

通过对算法的复杂度比较,它由于原始的完形匹配算法,在最坏情况下有n的平方次运算,在最好情况下,具有线性的效率。

它具有自动垃圾启发式,可以将重复超过片段1%或者重复200次的字符作为垃圾来处理。可以通过将autojunk设置为false关闭该功能。

class difflib.Differ

此类比较的是文本行的差异并且产生适合人类阅读的差异结果或者增量结果,结果中各部分的表示如下:

python difflib模块示例讲解

class difflib.HtmlDiff

 此类可以被用来创建HTML表格 (或者说包含表格的html文件) ,两边对应展示或者行对行的展示比对差异结果。

 make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

以上两个方法都可以用来生成包含一个内容为比对结果的表格的html文件,并且部分内容会高亮显示。

difflib.context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])

比较a与b(字符串列表),并且返回一个差异文本行的生成器
示例:

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...   sys.stdout.write(line) 
*** before.py
--- after.py
***************
*** 1,4 ****
! bacon
! eggs
! ham
 guido
--- 1,4 ----
! python
! eggy
! hamster
 guido

difflib.get_close_matches(word, possibilities[, n][, cutoff])

返回最大匹配结果的列表

示例:

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('apple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']

difflib.ndiff(a, b[, linejunk][, charjunk])

比较a与b(字符串列表),返回一个Differ-style 的差异结果
示例:

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1),
...       'ore\ntree\nemu\n'.splitlines(1))
>>> print ''.join(diff),
- one
? ^
+ ore
? ^
- two
- three
? -
+ tree
+ emu

difflib.restore(sequence, which)

返回一个由两个比对序列产生的结果

示例

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1),
...       'ore\ntree\nemu\n'.splitlines(1))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print ''.join(restore(diff, 1)),
one
two
three
>>> print ''.join(restore(diff, 2)),
ore
tree
emu

difflib.unified_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])

比较a与b(字符串列表),返回一个unified diff格式的差异结果.

示例:

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...  sys.stdout.write(line) 
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido

实际应用示例

比对两个文件,然后生成一个展示差异结果的HTML文件

#coding:utf-8
'''
file:difflibeg.py
date:2017/9/9 10:33
author:lockey
email:lockey@123.com
desc:diffle module learning and practising 
'''
import difflib
hd = difflib.HtmlDiff()
loads = ''
with open('G:/python/note/day09/0907code/hostinfo/cpu.py','r') as load:
 loads = load.readlines()
 load.close()

mems = ''
with open('G:/python/note/day09/0907code/hostinfo/mem.py', 'r') as mem:
 mems = mem.readlines()
 mem.close()

with open('htmlout.html','a+') as fo:
 fo.write(hd.make_file(loads,mems))
 fo.close()

运行结果:

python difflib模块示例讲解

生成的html文件比对结果:

python difflib模块示例讲解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现字符串格式化的方法小结
Feb 20 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
python实现媒体播放器功能
Feb 11 Python
python如何实现异步调用函数执行
Jul 08 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
win10系统下python3安装及pip换源和使用教程
Jan 06 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
如何基于python实现年会抽奖工具
Oct 20 Python
python SOCKET编程基础入门
Feb 27 Python
详解Python中的进程和线程
Jun 23 Python
Python极值整数的边界探讨分析
Sep 15 Python
Python网络编程 Python套接字编程
Sep 13 #Python
python和ruby,我选谁?
Sep 13 #Python
python实现简单点对点(p2p)聊天
Sep 13 #Python
django 常用orm操作详解
Sep 13 #Python
Python三级菜单的实例
Sep 13 #Python
基于Python代码编辑器的选用(详解)
Sep 13 #Python
python多线程socket编程之多客户端接入
Sep 12 #Python
You might like
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
vue实现在线学生录入系统
2020/05/30 Javascript
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
python基于opencv实现人脸识别
2021/01/04 Python
大学自主招生自荐信范文
2014/02/26 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
新教师岗前培训方案
2014/06/05 职场文书
企业宣传口号
2014/06/12 职场文书
个人存款证明书
2014/10/18 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书