3.3.3 Differ对象

来源:互联网 发布:mysql btree索引原理 编辑:程序博客网 时间:2024/05/29 04:59

3.3.3 Differ对象

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

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

构造一个Differ对象,linejunkcharjunk是可选的过滤函数,如果不设置,默认为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来比较字符串s1s2,最后把结果生成一个列表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  深圳

0 0
原创粉丝点击