python difflib模块示例讲解

作者:Lockeyi 时间:2022-01-21 04:35:57 

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模块示例讲解

来源:http://blog.csdn.net/Lockey23/article/details/77913855

标签:python,difflib,模块
0
投稿

猜你喜欢

  • 详解Python中的分支和循环结构

    2023-07-19 11:56:21
  • 用python监控服务器的cpu,磁盘空间,内存,超过邮件报警

    2023-04-22 07:13:38
  • mysql数据库重命名语句分享

    2024-01-18 20:05:24
  • Linux安装Pytorch1.8GPU(CUDA11.1)的实现

    2021-12-20 10:02:00
  • python区块链基本原型简版实现示例

    2021-07-12 17:15:04
  • 36个折纸风格logo设计

    2009-09-17 13:13:00
  • msxml3.dll 错误 ‘800c0005’解决方案

    2009-10-05 18:36:00
  • Go语言实现的web爬虫实例

    2023-07-21 02:35:57
  • Python time模块时间获取和转换方法

    2022-06-07 11:14:30
  • 详解SQLServer和Oracle的分页查询

    2024-01-21 10:11:39
  • js键盘事件全面控制

    2008-02-21 12:51:00
  • 使用Python3中的gettext模块翻译Python源码以支持多语言

    2022-10-17 21:36:07
  • asp中的rs.open于conn.execute的区别

    2009-10-29 12:12:00
  • Python爬虫Xpath定位数据的两种方法

    2022-07-03 16:36:53
  • django如何自定义manage.py管理命令

    2023-04-08 01:10:47
  • 关于Node.js中Buffer的一些你可能不知道的用法

    2024-05-09 09:05:33
  • 一次mysql迁移的方案与踩坑实战记录

    2024-01-13 03:34:42
  • Python+AutoIt实现界面工具开发过程详解

    2023-06-17 20:39:47
  • PHP实现对数组分页处理实例详解

    2023-11-21 07:08:13
  • MySQL批量更新的四种方式总结

    2024-01-13 17:53:08
  • asp之家 网络编程 m.aspxhome.com