# -*- 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-比较序列的更多相关文章

  1. Python标准库概览

    Python标准库通常被称为"自带的电池",自然地提供了广泛的功能,涵盖了大概200个左右的包与模块.不断有高质量的包或模块被开发出来,极大的丰富了标准库.但有些模块放在标准库中很 ...

  2. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

  3. 转--Python标准库之一句话概括

    作者原文链接 想掌握Python标准库,读它的官方文档很重要.本文并非此文档的复制版,而是对每一个库的一句话概括以及它的主要函数,由此用什么库心里就会有数了. 文本处理 string: 提供了字符集: ...

  4. Python 标准库一览(Python进阶学习)

    转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...

  5. python标准库之字符编码详解

    codesc官方地址:https://docs.python.org/2/library/codecs.html 相关帮助:http://www.cnblogs.com/huxi/archive/20 ...

  6. A Byte of Python 笔记(12)python 标准库:sys、os,更多内容

    第14章 python 标准库 Python标准库是随Python附带安装的,它包含大量极其有用的模块. sys 模块 sys 模块包含系统对应的功能.如 sys.argv 列表包含命令行参数. # ...

  7. [python标准库]Pickle模块

    Pickle-------python对象序列化 本文主要阐述以下几点: 1.pickle模块简介 2.pickle模块提供的方法 3.注意事项 4.实例解析 1.pickle模块简介 The pic ...

  8. python标准库总的random函数用法

    Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等.random中的一些重要函数的用法:1 ).random() 返回0& ...

  9. Python标准库笔记(11) — Operator模块

    Operator--标准功能性操作符接口. 代码中使用迭代器时,有时必须要为一个简单表达式创建函数.有些情况这些函数可以用一个lambda函数实现,但是对于某些操作,根本没必要去写一个新的函数.因此o ...

随机推荐

  1. PHP设计模式笔记八:原型模式 -- Rango韩老师 http://www.imooc.com/learn/236

    原型模式 概述: 1.与工厂模式作用类似,都是用来创建对象 2.与工厂模式的实现不同,原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象,这样就免去了类创建时重复的初始化操作 3 ...

  2. oracle日期计算

    查询某月有多少天.代码例如以下: select to_number(add_months( trunc(to_date('2014-11-4 11:13:53','yyyy-mm-dd hh24:mi ...

  3. BNU10791:DOTA选人

    DOTA(Defense of the Ancients)是一款很受欢迎的游戏.DOTA将10个游戏玩家分为两组,分别为天灾和近卫,推倒对方主基地的一方获得胜利.每个玩家可以选择一个英雄作为游戏中的角 ...

  4. EasyInvoice 使用教程 - (1) 认识 EI

    原视频下载地址:EI 主界面介绍 1. 主界面截图 2. 基础资料界面截图 3. 管理员 界面截图

  5. Picasso – Android系统的图片下载和缓存类库

    Picasso – Android系统的图片下载和缓存类库 Picasso 是Square开源的一个用于Android系统下载和缓存图片的项目.该项目和其他一些下载图片项目的主要区别之一是:使用4.0 ...

  6. 前端--关于HTML

    在讲HTML之前不得不先简单粗略提一下浏览器以及浏览器与HTML的关系.众所周知,浏览器就是一个应用程序,这个应用程序可以完成网络调用.展示接收的html文档等.严格来讲HTML文档就是按照某个规则写 ...

  7. VS2010 ReportViewer导出文件下载保存不能识别文件类型

    今天测试项目时,突然发现导出报表下载保存的保存,不能识别文件的类型,文件名称为:.xls[3] 检查代码发现在指定报表路径时多了一个方法: ReportViewer1.LocalReport.Load ...

  8. C#中的表达式树的浅解

    表达式树可以说是Linq的核心之一,为什么是Linq的核心之一呢?因为表达式树使得c#不再是仅仅能编译成IL,我们可以通过c#生成一个表达式树,将结果作为一个中间格式,在将其转换成目标平台上的本机语言 ...

  9. Java系列--目录

    因工作项目的需要,从C#转Java也有很长一段时间了,决定记载归纳一下这半年到底学了什么,到了一个什么程度,当然其间可能会有一些关于.NET的对比. 这是这个系列的目录,我准备按照我的归纳学习点来写, ...

  10. Gora官方文档之二:Gora对Map-Reduce的支持

    参考官方文档:http://gora.apache.org/current/tutorial.html 项目代码见:https://code.csdn.net/jediael_lu/mygoradem ...