python标准库 difflib-比较序列
# -*- coding: utf-8 -*-
# python:2.x
__author__ = 'Administrator'
#difflib比较序列
#版本2.1及之后
#作用:包含一些用来计算和处理序列之间差异工具,对文本特别有用,其中包含函数可以使用多种常用差异格式生成报告
#比较文本体
#Differ类用于处理文本序列,生成人类可读的差异或者更改指令,包括中的差异,Differ生成默认输出与unix下的diff命令工具类似,包括2个列表原始输入值
"""
”—— ” 行序列1所特有的
“+ ” 行序列2所特有的
” ” 行共同序列
”? ” 线不是出现在输入序列
如果某一行在不同版本之间存在增量差异,会使用一个'?'为前缀额外行强调新版本中变更
如果一行未改变,会输出该行,而且其左边有一个额外的空格,使它与其他可能有差异输出对齐
"""
#compare()可以先分解为由单个文件行构成序列,与传入大字符串相比,这样可以生成更可读输出
import difflib
from difflib_date import *
d=difflib.Differ()
diff=d.compare(text1_lines,text2_lines)
print '\n'.join(diff)
#ndiff()函数生成输出基本上相同,会特别加工来处理文本数据,并删除输入中噪声
diff=difflib.unified_diff(text1_lines,text2_lines,lineterm='',)
print '\n'.join(diff)
#lineterm参数会告诉unified_difff()不必为它返回控制行追加换行符,因为输入行不包括这些换行符,输出时所有行都会增加换行符,对于subversion或者其他版本控制工具用户来说,很熟悉
#context_diff()生成类似可读输出
#无用数据
from difflib import SequenceMatcher
A = " abcd"
B = "abcd abcd"
print 'A = %r' % A
print 'B = %r' % B
print '\nWithout junk detection:'
s = SequenceMatcher(None, A, B)
i, j, k = s.find_longest_match(0, 5, 0, 9)
print ' i = %d' % i
print ' j = %d' % j
print ' k = %d' % k
print ' A[i:i+k] = %r' % A[i:i+k]
print ' B[j:j+k] = %r' % B[j:j+k]
print '\nTreat spaces as junk:'
s = SequenceMatcher(lambda x: x==" ", A, B)
#i, j, k = s.find_longest_match(0, 5, 0, 9)
print ' i = %d' % i
print ' j = %d' % j
print ' k = %d' % k
print ' A[i:i+k] = %r' % A[i:i+k]
print ' B[j:j+k] = %r' % B[j:j+k]
#默认情况下,Differ不会忽略任何行或者字符,而会依赖SequenceMatcher的能力检测噪声,ndiff()默认行为是忽略空格和制作符(tab)
#比较任何类型(重点)
#SequenceMatcher类型用于比较任意类型的2个序列,可要它们的值 可散行的
s1=[1,2,3,5,6,4]
s2=[2,3,5,4,6,1]
print 's1=',s1
print 's2=',s2
print 's1==s2',s1==s2
matchr=difflib.SequenceMatcher(None,s1,s2)
for tag, i1, i2, j1, j2 in reversed(matchr.get_opcodes()):
if tag=='delete':
print 'remove%s from positions[%d:%d]'%(s1[i1:i2],i1,i2)
elif tag=='equal':
print 's1[%d:%d] and s2[%d:%d]'%(i1,i2,j1,j2)
elif tag=='insert':
print '%s s2[%d:%d] and %d'%(s2[j1:j2],j1,j2,i1)
s1[i1:i2]=s2[j1:j2]
elif tag=='replace':
print '%s s2[%d:%d] and %s s2[%d:%d]'%(s1[i1:i2], i1, i2, s2[j1:j2], j1, j2)
s1[i1:i2] = s2[j1:j2]
print 's1=',s1
print 's2=',s2
print 's1==s2',s1==s2
#get_opcodes()得到将原列表转换为新列表的指令
#官方文档:https://docs.python.org/2.7/library/difflib.html?highlight=difflib#difflib
#对这部分算法进行讨论:http://pymotw.com/2/articles/text_processing.html#article-text-processing
python标准库 difflib-比较序列的更多相关文章
- Python标准库概览
		
Python标准库通常被称为"自带的电池",自然地提供了广泛的功能,涵盖了大概200个左右的包与模块.不断有高质量的包或模块被开发出来,极大的丰富了标准库.但有些模块放在标准库中很 ...
 - python第六天  函数  python标准库实例大全
		
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
 - 转--Python标准库之一句话概括
		
作者原文链接 想掌握Python标准库,读它的官方文档很重要.本文并非此文档的复制版,而是对每一个库的一句话概括以及它的主要函数,由此用什么库心里就会有数了. 文本处理 string: 提供了字符集: ...
 - Python 标准库一览(Python进阶学习)
		
转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...
 - python标准库之字符编码详解
		
codesc官方地址:https://docs.python.org/2/library/codecs.html 相关帮助:http://www.cnblogs.com/huxi/archive/20 ...
 - A Byte of Python 笔记(12)python 标准库:sys、os,更多内容
		
第14章 python 标准库 Python标准库是随Python附带安装的,它包含大量极其有用的模块. sys 模块 sys 模块包含系统对应的功能.如 sys.argv 列表包含命令行参数. # ...
 - [python标准库]Pickle模块
		
Pickle-------python对象序列化 本文主要阐述以下几点: 1.pickle模块简介 2.pickle模块提供的方法 3.注意事项 4.实例解析 1.pickle模块简介 The pic ...
 - python标准库总的random函数用法
		
Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等.random中的一些重要函数的用法:1 ).random() 返回0& ...
 - Python标准库笔记(11) — Operator模块
		
Operator--标准功能性操作符接口. 代码中使用迭代器时,有时必须要为一个简单表达式创建函数.有些情况这些函数可以用一个lambda函数实现,但是对于某些操作,根本没必要去写一个新的函数.因此o ...
 
随机推荐
- 用户控件(.ascx)与<ul><li>以及<a>布局之小结
			
用户控件(.ascx)与<ul><li>以及<a>布局 小结 一.用户控件(.ascx) 1.aspx是浏览器直接访问的页面,而ascx是用户控件,一般是用来重用. ...
 - Bloom Filter 算法具体解释
			
Bloom Filter 算法 Bloom filter是由Burton Bloom 在1970年提出的,其后在P2P上得到了广泛的应用.Bloom filter 算法可用来查询某一数据是否在某一数据 ...
 - Java第四周学习日记(绪)
			
1.静态导入 作用:简化书写静态导入可以作用一个类的所有静态成员静态导入格式:import static 包名.类名静态导入要注意的事项:如果静态导入的成员与本类的成员存在同名的情况下,那么默认使用本 ...
 - .NET基础拾遗(4)委托为何而生?
			
生活中的例子: 你早上要吃包子作为早饭,那么你可能让你爸爸或者妈妈帮你做,那你就会调用 爸爸.要包子() 或妈妈.要包子() 返回包子对象. 但是如果你爸妈不在家的时候,你只能去街上买,问题是你根本不 ...
 - DotNet程序汉化过程--SnippetCompiler奇葩的字符串
			
开篇前言 汉化的过程总会遇到各种各样的问题,让人抓狂,这一篇我就来讲解一下一个特殊的单词的汉化以及我的“艰辛历程”. 起因介绍 在SnippetCompiler有这么一个奇葩的字符串“查找>&g ...
 - Mysql 细节记忆
			
DELIMITER $$ 和 DELIMITER ; DROP PROCEDURE IF EXISTS `pro_follow_getBookBeforeExpired`$$ DECLARE p_Se ...
 - viewstate加密(转)
			
ViewState在客户端展开的时候,默认是Auto,不加密的,如果页面有限制性的表单控件才加密,所以,可以查看,代码如下: byte[] bytes = Convert.FromBase64Stri ...
 - (转)Web.config配置文件详解(新手必看)
			
花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...
 - ASP.NET批量下载服务器端指定目录文件
			
//遍历服务器指定文件夹下的所有文件 string path = "uploads/Image/"; string serverPath = Server.MapPath(path ...
 - 《第一行代码》学习笔记8-活动Activity(6)
			
1.返回上一个活动只需要按一下Back键,还有一个startActivityForResult()方法也是 用于启动活动,这个方法期望在活动销毁时能够返回一个结果给上一个活动. 2.startActi ...