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

class difflib.SequenceMatcher

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

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

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

class difflib.Differ

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

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()

运行结果:

生成的html文件比对结果:

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

本文标题: python difflib模块示例讲解

本文地址: http://www.cppcns.com/jiaoben/python/203432.html

pythondifflib详解_python difflib模块示例讲解相关推荐

  1. python中os模块详解_Python OS模块(常见文件操作示例)

    1 Python 常见文件操作示例 2. 3. os.path 模块中的路径名访问函数 4. 分隔 5. basename() 去掉目录路径 , 返回文件名 6. dirname() 去掉文件名 , ...

  2. python pexpect模块详解_python Pexpect模块如何使用 python Pexpect模块使用代码示例

    python Pexpect模块如何使用?本篇文章小编给大家分享一下python Pexpect模块使用代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以 ...

  3. python paramiko详解_python paramiko模块讲解

    Windows下有很多非常好的SSH客户端,比如Putty.在Python的世界里,你可以使用原始套接字和一些加密函数创建自己的SSH客户端或服务端,但如果有现成的模块,为什么还要自己实现呢.使用Pa ...

  4. python的pygame模块详解_python游戏模块学习之pygame常规操作讲解

    pygame常规操作 导入模块 import pygame # 导入pygame模块 from sys import exit # 导入退出鼠标点击事件 from math import pi # 导 ...

  5. python email模块详解_python email模块

    python email模块 email模块 电子邮件包是一个用于管理电子邮件消息的库.它的特殊设计不用于向SMTP (RFC 2821).NNTP或其他服务器发送任何电子邮件消息;这些是模块的函数, ...

  6. python中configparser详解_python ConfigParser模块详解

    功能介绍 在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,这里简单 ...

  7. python中time模块详解_Python time模块详解

    time 模块主要包含各种提供日期.时间功能的类和函数.该模块既提供了把日期.时间格式化为字符串的功能,也提供了从字符串恢复日期.时间的功能. 在 Python 的交互式解释器中先导入 time 模块 ...

  8. python pexpect模块详解_python pexpect模块

    Pexpect模块简介: Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 ...

  9. pythonnumpy矩阵详解_python常用模块numpy解析(详解)

    numpy模块 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 后打开浏览器输入网址http://local ...

最新文章

  1. noip2010提高组3题题解 by rLq
  2. Android的ImageView背后的绘制原理
  3. MacOS中安装python-jekins失败解决方法
  4. Java 性能优化之 String 篇
  5. 量子计算机会取代经典计算机,量子计算机已经可以取代经典计算机了?已科学解答...
  6. 《复联4》| 生活需要漫威这块糖
  7. Python学习笔记:PMT与PV函数
  8. 奥迪公布未来五年计划:将在电动汽车方面投资120亿欧元
  9. tflite C++ API 部署分类模型
  10. 【割点】【割边】tarjan
  11. SharePoint 2013 创建web应用程序报错This page can’t be displayed
  12. [转载]HTTP的幂等性
  13. MRP系统对生产型企业的作用
  14. 中文邮件分类[朴素贝叶斯、支持向量机、Logistic,TF-IDF,词袋模型]
  15. 信息学奥赛一本通:1153:绝对素数
  16. 《Python绝技:运用Python成为顶级黑客》的学习笔记
  17. Nginx系列1: 正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡
  18. 卷积神经网络相比循环神经网络具有哪些特征
  19. 光敏二极管血氧仪方案设计研发
  20. 成语学习微信小程序源码

热门文章

  1. 想要拥有自己的jar包吗?------超级简单的打jar包教程~~~
  2. c语言do while语句用法6,c语言do while的用法
  3. java抽象方法特点_java-抽象类的特点
  4. HALCON 20.11:学习笔记---一维测量(Measuring)
  5. 二相步进电机和三相步进电机有什么区别?
  6. java函数改变参数值_Java函数参数值正在改变
  7. 产品心经:产品经理应该知道的60件事
  8. 0918类对象重载,作业2
  9. SSH中直接运行php文件
  10. mac下idea中使用svn出现的问题的记录