3.3.3 Differ对象

3.3.3 Differ对象

Differ对象是进行全文比较,然后列表那一个位置增加、减少或者相同。

类difflib.Differ(linejunk=None, charjunk=None)

构造一个Differ对象,linejunk和charjunk是可选的过滤函数,如果不设置,默认为None。

linejunk是一个可以过滤不需要的字符串行的函数对象,当不需要时返回True。

charjunk是一个可以过滤不需要的字符的函数对象,当不需要时返回True。

compare(a, b)

比较两个序列,生成一个增加或删除的文本描述。

3.3.4 使用Differ对象

Differ对象主要用来比较文本之间的差异,然后把差异文本按一定规则生成一个字符串返回。

比较两个简单的字符串

例子:

#python3.4.3

import difflib

from pprint import pprint

s1 = ‘ abcd 123 321‘

s2 = ‘abcd abcd 123321‘

print(‘s1 = ‘, s1)

print(‘s2 = ‘, s2)

print(‘s1 == s2‘, s1 == s2)

print(‘‘)

diff = difflib.Differ()

print(diff)

l = list(diff.compare(s1, s2))

pprint(l)

结果输出如下:

s1 =   abcd 123 321

s2 =  abcd abcd 123321

s1 == s2 False

<difflib.Differ object at 0x0298B4D0>

[‘+ a‘,

‘+ b‘,

‘+ c‘,

‘+ d‘,

‘   ‘,

‘  a‘,

‘  b‘,

‘  c‘,

‘  d‘,

‘   ‘,

‘  1‘,

‘  2‘,

‘  3‘,

‘-  ‘,

‘  3‘,

‘  2‘,

‘  1‘]

从这个例了里可以看到,先创建Differ对象,然后调用函数compare来比较字符串s1和s2,最后把结果生成一个列表list返回,通过pprint来打印输出,这里使用pprint打印是由于这样输出更容易看得清楚,每一行是增加还是减少,是保持不变等等。结果里前面有加号表示增加,没有符号的是表示不变,减号表示删除。

多行文本进行比较

对于文本文件进行比较,在需要的应用场合还是比较多的,比如源码的版本控制里比较两个不同的版本的修改,这样可以知道每个版本变更了什么代码;比如在云服务里保存不同的文本时,是否只可以保留增加部分的数据,这样可以降低储存的成本,同时也可以恢复到以前的版本。

例子:

#python3.4.3

import difflib

from pprint import pprint

text1 = ‘‘‘  1. Beautiful is better than ugly.

2. Explicit is better than implicit.

3. Simple is better than complex.

4. Complex is better than complicated.

‘‘‘.splitlines(keepends=True)

text2 = ‘‘‘  1. Beautiful is better than ugly.

3.   Simple is better than complex.

4. Complicated is better than complex.

5. Flat is better than nested.

‘‘‘.splitlines(keepends=True)

diff = difflib.Differ()

print(diff)

l = list(diff.compare(text1, text2))

pprint(l)

结果输出如下:

<difflib.Differ object at 0x029EB4B0>

[‘    1. Beautiful is better than ugly.\n‘,

‘-    2. Explicit is better than implicit.\n‘,

‘-    3. Simple is better than complex.\n‘,

‘+    3.   Simple is better than complex.\n‘,

‘?      ++\n‘,

‘-    4. Complex is better than complicated.\n‘,

‘?             ^                     ---- ^\n‘,

‘+    4. Complicated is better than complex.\n‘,

‘?            ++++ ^                      ^\n‘,

‘+    5. Flat is better than nested.\n‘,

‘   ‘]

从结果看到这个显示更加详细很多,每一行里的字符差异都已经标记出来。

蔡军生  微信号:shenzhencai  深圳

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-04 20:38:19

3.3.3 Differ对象的相关文章

Python文件对比

环境: python2.6.6 linux系统 对比文件差异用Python里的difflib模块: Python自带difflib模块,无需安装. 对比两个文件是否一样总体思路就是:将文件里的内容读出来然后再对比 符号 含义 + 包含在第二个序列中,但不包含第一个序列中 - 包含在第一个序列中,但不包含第二个序列中 ? 标志两个序列行存在增量差异 ^ 标志两个序列存在的差异字符 '' 两个序列行一致 示例一: #!/usr/bin/python #coding:utf-8 #2017,8,27

二、业务服务监控

二.业务服务监控 1.文件内容差异对比方法 difflib模块实现文件内容差异对比,difflib作为python的标准库模块,无需安装,作用是对比文本之间的差异,且支持输出可读性比较强的HTML文档,与linux下的diff命令相似.我们可以使用difflib对比代码,配置文件的差别,在版本控制方面是非常有用. (1)示例:两个字符串的差异对比 通过使用difflib模块实现两个字符串的差异对比,然后以版本控制风格进行输出 [/root/text1_lines.py] #! /usr/bin/

python difflib.md

difflib 此模块提供了用于比较序列的类和函数.它可以用于例如比较文件,并且可以产生各种格式的差异信息,包括HTML和上下文以及统一差异. difflib 模块包含用于计算和处理序列间差异的工具.它特别适用于比较文本,包括使用几种常见差异格式生成报告的函数. 本节中的示例将在扩散数据中使用这个常见的测试difflib_data.py模块: text1 = """Lorem ipsum dolor sit amet, consectetuer adipiscing elit

Python自动化运维——文件内容差异对比

Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:difflib 安装:Python版本大于等于2.3系统自带 功能:对比文本之间的差异,而且支持输出可读性比较强的HTML文档,与Linux中的diff命令比较相似. 两个字符串的差异对比: #import difflib #text1=''' #hello world. #how are you. #nice to meet you. #''' #text1_lines=text1.splitlines

《Python自动化运维之路》 业务服务监控(二)

文件内容差异对比方法 目录: 实例:两个字符串的差异对比 生成美观的对比HTML格式文档 对比Nginx配置文件的差异 两个字符串的差异对比 本例通过使用difflib模块实现两个字符串的差异对比,然后以版本控制风格进行输出. >>> import difflib >>> >>> text1="difflib document v7.4" #定义字符串1 >>> text2="difflib docume

DevOpps python常用库尝鲜

#devopps with python###python库 psutil<pre>1.安装<pre>pip install psutil</pre>2.使用<pre>(1)获取cpu信息<pre>#encoding=utf-8 import psutil #使用cpu_times方法获取cpu完整信息,需要显示所有逻辑CPU信息#制定方法变量percpu=True即可,如pstuil.cpu_times(percpu=True)cpu_time

python运维开发常用模块(四)文件对比模块difflib

1.difflib介绍 difflib作为 Python的标准库模块,无需安装,作用是对比文本之间的差异,且支持 输出可读性比较强的HTML文档,与Linux下的diff命令相似.我们可以 使用difflib对比代码.配置文件的差别,在版本控制方面是非常有用. Python 2.3或更高版本默认自带difflib模块,无需额外安装. 示例1:两个字符串的差异对比 [[email protected] part2]$ cat simple1.py #!/usr/bin/python #_*_cod

django的HTTPREQUEST对象

Django使用request和response对象 当请求一张页面时,Django把请求的metadata数据包装成一个HttpRequest对象,然后Django加载合适的view方法,把这个HttpRequest 对象作为第一个参数传给view方法.任何view方法都应该返回一个HttpResponse对象. 我们在本书中大量使用这两个对象:本附录详细解释HttpRequest和HttpResponse对象. HttpRequest HttpRequest代表一个来自uesr-agent的

Object对象详解(三)之hashCode与equals

从学习Java开始,就从各个师兄.各种书籍.各大网站听到.看到,重写equals方法必须重写hashCode方法.重写equals方法必须重写hashCode方法.重写equals方法必须重写hashCode方法. 那么为什么呢?今天就详细剖析一下equals和hashCode! equals方法是比较两个对象实例是否相等.Object中equals方法的描述为: public boolean equals(Object obj) { return (this == obj); } 也就是默认情