python里使用difflib库的Differ来比较文本
发布日期:2021-07-01 05:09:27 浏览次数:2 分类:技术文章

本文共 3343 字,大约阅读时间需要 11 分钟。

在软件开发里,常常需要比较不同版本的代码,因为开发人员在一个月,或者一年之后,发现代码已经更改了,但会忘记更改那里了,怎么办呢?就会拿当前的版本代码与一年之前的版本代码进行比较,这时就会找到差异的地方。又或者当一个作家正在写一篇文章时,已经写了好几十万字,某一天忘记锁屏电脑了,给一个熊儿子不小心打入一个字,并且已经保存到电脑里。这时作家要把这个字找出来,怎么办呢?一个字一个字地去比对,那是多么麻烦的事情。如果能拿到旧版本的文档,再与新版本的文档进行比较,把差异化的结果显示出来,这样就省了很多时间。为了比较文本的差异化,在python里提供difflib库的Differ来比较文本,如下面的例子:
text1 = """Lorem ipsum dolor sit amet, consectetuer adipiscingelit. Integer eu lacus accumsan arcu fermentum euismod. Donecpulvinar porttitor tellus. Aliquam venenatis. Donec facilisispharetra tortor.  In nec mauris eget magna consequatconvalis. Nam sed sem vitae odio pellentesque interdum. Sedconsequat viverra nisl. Suspendisse arcu metus, blandit quis,rhoncus ac, pharetra eget, velit. Mauris urna. Morbi nonummymolestie orci. Praesent nisi elit, fringilla ac, suscipit non,tristique vel, mauris. Curabitur vel lorem id nisl portaadipiscing. Suspendisse eu lectus. In nunc. Duis vulputatetristique enim. Donec quis lectus a justo imperdiet tempus."""text1_lines = text1.splitlines()text2 = """Lorem ipsum dolor sit amet, consectetuer adipiscingelit. Integer eu lacus accumsan arcu fermentum euismod. Donecpulvinar, porttitor tellus. Aliquam venenatis. Donec facilisispharetra tortor. In nec mauris eget magna consequatconvalis. Nam cras vitae mi vitae odio pellentesque interdum. Sedconsequat viverra nisl. Suspendisse arcu metus, blandit quis,rhoncus ac, pharetra eget, velit. Mauris urna. Morbi nonummymolestie orci. Praesent nisi elit, fringilla ac, suscipit non,tristique vel, mauris. Curabitur vel lorem id nisl portaadipiscing. Duis vulputate tristique enim. Donec quis lectus ajusto imperdiet tempus.  Suspendisse eu lectus. In nunc."""text2_lines = text2.splitlines()
#python 3.6#蔡军生 #http://blog.csdn.net/caimouse/article/details/51749579#import difflibfrom difflib_data import *d = difflib.Differ()diff = d.compare(text1_lines, text2_lines)print('\n'.join(diff))
输出结果如下:
  Lorem ipsum dolor sit amet, consectetuer adipiscing
  elit. Integer eu lacus accumsan arcu fermentum euismod. Donec
- pulvinar porttitor tellus. Aliquam venenatis. Donec facilisis
+ pulvinar, porttitor tellus. Aliquam venenatis. Donec facilisis
?         +
- pharetra tortor.  In nec mauris eget magna consequat
?                 -
+ pharetra tortor. In nec mauris eget magna consequat
- convalis. Nam sed sem vitae odio pellentesque interdum. Sed
?                 - --
+ convalis. Nam cras vitae mi vitae odio pellentesque interdum. Sed
?               +++ +++++   +
  consequat viverra nisl. Suspendisse arcu metus, blandit quis,
  rhoncus ac, pharetra eget, velit. Mauris urna. Morbi nonummy
  molestie orci. Praesent nisi elit, fringilla ac, suscipit non,
  tristique vel, mauris. Curabitur vel lorem id nisl porta
- adipiscing. Suspendisse eu lectus. In nunc. Duis vulputate
- tristique enim. Donec quis lectus a justo imperdiet tempus.
+ adipiscing. Duis vulputate tristique enim. Donec quis lectus a
+ justo imperdiet tempus.  Suspendisse eu lectus. In nunc.
Differ比较之后显示的规则如下:
1)一行前面有-号是出现在第一个版本,不出现在第二个版本。
2)一行前面有+号是出现在第二个版本,不出现在第一个版本。
3)如果一行里有变化,就会在后面的另外一行里增加一个?显示,并且在这行里显示+或-。

4)如果一行没有变化,就会在一行前面输出一个空格,以便对齐。

深入浅出Numpy
 

Python游戏开发入门


你也能动手修改C编译器


纸牌游戏开发

五子棋游戏开发

RPG游戏从入门到精通

WiX安装工具的使用
俄罗斯方块游戏开发
boost库入门基础
Arduino入门基础
Unity5.x游戏基础入门
TensorFlow API攻略
TensorFlow入门基本教程
C++标准模板库从入门到精通 
跟老菜鸟学C++
跟老菜鸟学python
在VC2015里学会使用tinyxml库
在Windows下SVN的版本管理与实战 
Visual Studio 2015开发C++程序的基本使用 
在VC2015里使用protobuf协议
在VC2015里学会使用MySQL数据库

转载地址:https://mysoft.blog.csdn.net/article/details/78617740 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python里使用difflib库的unified_diff来比较文本
下一篇:使用numpy来画三维图像

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月17日 00时09分34秒