Python 之 Difflib
Python 之 Difflib
2017年7月8日
word文档地址:https://wenku.baidu.com/view/36692440854769eae009581b6bd97f192379bf57
参考书籍:《Python自动化运维 ——技术与最佳实践》 作者:李天斯
1.什么是difflib
Difflib作为python的标准库,无需安装,作用是对比文本之间的差异,而且支持输出可读性比较强的HTML文档,与Linux下的vimdiff命令类似,我们可以比对文本、配置文件之间的差异,在版本控制方面非常有用。
2.difflib的简单使用
2.1 Differ的简单使用
2.1.1 编写python代码
root@kali:/mnt/disk/python/difflib# cat difflib_0.py #!/usr/bin/env python import difflib text1 = ''' I love HaiYan I very love HaiYan She's the one I love the most. ''' text2 = ''' I love LiWang I very love LiWang I'm his favorite person. ''' d = difflib.Differ() print (list(d.compare(text1,text2)))
2.1.2 执行脚本输出
# python difflib_0.py
[' \n', ' I', ' ', ' l', ' o', ' v', ' e', ' ', '+ L', '- H', '- a', ' i', '- Y', '+ W', ' a', ' n', '+ g', ' \n', ' I', ' ', ' v', ' e', ' r', ' y', ' ', ' l', ' o', ' v', ' e', ' ', '+ L', '- H', '- a', ' i', '- Y', '+ W', ' a', ' n', '+ g', ' \n', '- S', '+ I', "+ '", '+ m', '+ ', ' h', '+ i', '- e', "- '", ' s', ' ', '+ f', '+ a', '+ v', '+ o', '+ r', '+ i', ' t', '- h', ' e', ' ', '+ p', '+ e', '+ r', '+ s', ' o', ' n', '- e', '- ', '- I', '- ', '- l', '- o', '- v', '- e', '- ', '- t', '- h', '- e', '- ', '- m', '- o', '- s', '- t', ' .', ' \n']
输出了看不懂的列表,打印列表后再进行查看
增加代码:
list1 = list(d.compare(text1,text2)) for line in list1: if line == "\n": print ("\n") print ("%s" %(line),end='')
执行代码:
# python3 difflib_0.py I l o v e + L- H- a i- Y+ W a n+ g I v e r y l o v e + L- H- a i- Y+ W a n+ g - S+ I+ '+ m+ h+ i- e- ' s + f+ a+ v+ o+ r+ i t- h e + p+ e+ r+ s o n- e- - I- - l- o- v- e- - t- h- e- - m- o- s- t .
符号含义:
+:包含在第一个序列中,但不包含第二个序列
-:包含在第二个序列中,但是不包含第一个序列
2.2 HtmlDiff的简单使用
2.2.1 向文件写入内容
# echo -e "I love HaiYan \nI very love HaiYan \nShe's the one I love the most." > test_1 # echo -e "I love LiWang \nI very love LiWang \nI'm his favorite person" > test_2
2.2.2 编写python代码
# cat difflib_1.py #!/usr/bin/env python import difflib def open_files(filename): files = open(filename,'rb') text = files.read().splitlines() files.close() return text d = difflib.HtmlDiff() text_1 = open_files('test_1') text_2 = open_files('test_2') print (d.make_file(text_1,text_2))
2.2.3 执行脚本,用网页打开
# python difflib_1.py > /mnt/disk/html/index.html
3.difflib案例
3.1 需求
需求:利用python实现一个功能,只需要执行[python脚本名称 文件1 文件2],只需要打开浏览器输入网址就能够看见文件比对效果
3.2 流程图
流程图:
3.3 代码编写:
#cat difflib_2.py #!/usr/bin/env python #exit argv import sys #path import os #HtmlDiff import difflib html_files = '/mnt/disk/html/index.html' #Determine whether the parameter exists try: script_name = sys.argv[0] file1 = sys.argv[1] file2 = sys.argv[2] except: print ("%s Using: %s filename1 filename 2" %(script_name,script_name)) sys.exit() #Function 1 def dealwith_files(filename): #open files try: files = open(filename,'rb') #read files text = files.read().splitlines() #close files files.close() except: print ("Open files fail ") sys.exit() #return files return text #Determine if the files exists if os.path.isfile(file1) and os.path.isfile(file2): d = difflib.HtmlDiff() try: print_files = open(html_files,'w') print_files.write(d.make_file(dealwith_files(file1),dealwith_files(file2))) print_files.close() except: print ("write %s fail" %(html_files)) # print (d.make_file(dealwith_files(file1),dealwith_files(file2))) else: print ("%s or %s is not such file" %(file1,file2)) sys.exit()
3.4 执行脚本输出
# difflib_2.py # ./difflib_2.py debconf.conf debconf.conf.bak #
chmod 是赋予脚本执行权限,执行difflib_2py 参数为debconf.conf debconf.conf.bak,没有任何输出,则证明执行OK
3.5 效果
刷新网页
Python 之 Difflib的更多相关文章
- python利用difflib判断两个字符串的相似度
我们再工作中可能会遇到需要判断两个字符串有多少相似度的情况(比如抓取页面内容存入数据库,如果相似度大于70%则判定为同一片文章,则不录入数据库) 那这个时候,我们应该怎么判断呢? 不要着急,pytho ...
- 使用Python自带difflib模块进行文件内容差异对比
difflib_text.py #!/usr/bin/python import difflib import sys try: textfile1=sys.argv[1] textfile2=sys ...
- Python Thrift 简单示例
本文基于Thrift-0.10,使用Python实现服务器端,使用Java实现客户端,演示了Thrift RPC调用示例.Java客户端提供两个字符串参数,Python服务器端计算这两个字符串的相似度 ...
- 使用python比较两个文件的不同之处
比较两个文件的不同之处用处还是比较大的,特别是比较两个版本的不同之处 [root@localhost python]# cat diftest.py #!/usr/bin/python import ...
- python开发_difflib字符串比较
在python的difflib中 HtmlDiff:比较后以html方法展示 我们比较的是字符串: 'hello world!' 和 'hElLO Wor2d!' 具体代码: from difflib ...
- Python比较配置文件
工作中最常见的配置文件有四种:普通key=value的配置文件.Json格式的配置文件.HTML格式的配置文件以及YAML配置文件. 这其中以第一种居多,后三种在成熟的开源产品中较为常见,本文只针对第 ...
- 你可能不知道的 Python 技巧
英文 | Python Tips and Trick, You Haven't Already Seen 原作 | Martin Heinz (https://martinheinz.dev) 译者 ...
- difflib模块详解
1.两个字符串对比 import difflib text1=""" test1 #定义字符串 hellow my name is machanwei! difflib ...
- 对比Nginx配置文件差异
一.概要: Python2 官方文档:https://docs.python.org/2/library/difflib.html Python2 官方文档:https://docs.python.o ...
随机推荐
- python any() all()
any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True. 元素除了是 0.空.FALSE 外都算 TRUE. ...
- python 验证码 和进度条
import random def make_code(n): res='' for i in range(n): s1=chr(random.randint(65,90)) s2=str(rando ...
- 线性表(java)
线性表 概念:零个或者多个数据元素的有限序列. 特点:除了第一个元素没有前驱结点,最后一个元素没有后继结点外,其它元素有且仅有一个直接前驱和一个直接后继结点.元素的个数必定为有限个. 实现: 定义一个 ...
- Android.Study.Question
1. NullPointerException 1.1 发生该异常的原因. 1.2 解决方法有哪几种? try-catch 2. Eclipse 中 debug/run 两个模式,run 是relea ...
- RAC初步使用
信号基本流程: //1:创建信号 RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSub ...
- 爬虫初窥day4:requests
Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 ...
- maven 介绍(zz )
Maven 编辑 目录 1简介 2特点 3常用命令 4推荐书籍 5Win7配置 6生命周期 1 1简介 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构 ...
- 使用Python完成排序(冒泡、选择、插入法)
class Sort(object): @staticmethod def bubble_sort(ls): lenth = len(ls) if lenth == 0: return [] whil ...
- [C#]RichTextBox实现拖放
amespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeC ...
- 关于SSH中tomcat下中文名称图片不显示的问题
最近做一个SSH框架的项目,用tomcat发布,需要上传图片到指定路径,然后再将图片显示在页面上.有一个问题:如果是英文名称的图片,就正常显示,可如果是中文的,它就是显示不出来,于是乎,在网上各种百度 ...