《Python自动化运维:技术与最佳实践》一2.1 文件内容差异对比方法

简介:

本节书摘来自华章出版社《Python自动化运维:技术与最佳实践》一书中的第2章,第2.1节,作者 (美)Neil Bergman ,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.1 文件内容差异对比方法

本节介绍如何通过difflib模块实现文件内容差异对比。difflib作为Python的标准库模块,无需安装,作用是对比文本之间的差异,且支持输出可读性比较强的HTML文档,与Linux下的diff命令相似。我们可以使用difflib对比代码、配置文件的差别,在版本控制方面是非常有用。Python 2.3或更高版本默认自带difflib模块,无需额外安装,我们先通过一个简单的示例进行了解。

2.1.1 示例1:两个字符串的差异对比

本示例通过使用difflib模块实现两个字符串的差异对比,然后以版本控制风格进行输出。
【/home/test/difflib/simple1.py】

#!/usr/bin/python
import difflib
text1 = """text1:    #定义字符串1
This module provides classes and functions for comparing sequences.
including HTML and context and unified diffs.
difflib document v7.4
add string
"""
text1_lines = text1.splitlines()    #以行进行分隔,以便进行对比
text2 = """text2:    #定义字符串2
This module provides classes and functions for Comparing sequences.
including HTML and context and unified diffs.
difflib document v7.5"""
text2_lines = text2.splitlines()
d = difflib.Differ()    #创建Differ()对象
diff = d.compare(text1_lines, text2_lines)    # 采用compare方法对字符串进行比较
print '\n'.join(list(diff))

本示例采用Differ()类对两个字符串进行比较,另外difflib的SequenceMatcher()类支持任意类型序列的比较,HtmlDiff()类支持将比较结果输出为HTML格式,示例运行结果如图2-1所示。

image

为方便大家理解差异关系符号,表2-1对各符号含义进行说明。

image

2.1.2 生成美观的对比HTML格式文档

采用HtmlDiff()类的make_file()方法就可以生成美观的HTML文档,对示例1中代码按以下进行修改:

d = difflib.Differ()
diff = d.compare(text1_lines, text2_lines)
print '\n'.join(list(diff))

替换成:

d = difflib.HtmlDiff()
print d.make_file(text1_lines, text2_lines)

将新文件命名为simple2.py,运行# python simple2.py > diff.html,再使用浏览器打开diff.html文件,结果如图示2-2所示,HTML文档包括了行号、差异标志、图例等信息,可读性增强了许多。

image

2.1.3 示例2:对比Nginx配置文件差异

当我们维护多个Nginx配置时,时常会对比不同版本配置文件的差异,使运维人员更加清晰地了解不同版本迭代后的更新项,实现的思路是读取两个需对比的配置文件,再以换行符作为分隔符,调用difflib.HtmlDiff()生成HTML格式的差异文档。实现代码如下:

【/home/test/difflib/simple3.py】

#!/usr/bin/python
import difflib
import sys

try:
    textfile1=sys.argv[1]    #第一个配置文件路径参数
    textfile2=sys.argv[2]    #第二个配置文件路径参数
except Exception,e:
    print "Error:"+str(e)
    print "Usage: simple3.py filename1 filename2"
    sys.exit()

def readfile(filename):    #文件读取分隔函数
    try:
        fileHandle = open (filename, 'rb' )
        text=fileHandle.read().splitlines()    #读取后以行进行分隔
        fileHandle.close()
        return text
    except IOError as error:
       print('Read file Error:'+str(error))
       sys.exit()

if textfile1=="" or textfile2=="":
    print "Usage: simple3.py filename1 filename2"
    sys.exit()

text1_lines = readfile(textfile1)    #调用readfile函数,获取分隔后的字符串
text2_lines = readfile(textfile2)

d = difflib.HtmlDiff()    #创建HtmlDiff()类对象
print d.make_file(text1_lines, text2_lines)    #通过make_file方法输出HTML格式的比对结果

运行如下代码:

# python simple3.py nginx.conf.v1 nginx.conf.v2 > diff.html

从图2-3中可以看出nginx.conf.v1与nginx.conf.v2配置文件存在的差异。
2.1节示例参考官网文档http://docs.python.org/2/library/difflib.html。

image

相关文章
|
存储 监控 API
Python实战:跨平台电商数据聚合系统的技术实现
本文介绍如何通过标准化API调用协议,实现淘宝、京东、拼多多等电商平台的商品数据自动化采集、清洗与存储。内容涵盖技术架构设计、Python代码示例及高阶应用(如价格监控系统),提供可直接落地的技术方案,帮助开发者解决多平台数据同步难题。
|
JSON API 开发者
天猫商品详情API接口技术解析与Python实现
天猫商品详情API(tmall.item_get)通过商品ID获取商品标题、价格、库存、图片、SKU及评价等详细信息,支持HTTP请求与JSON格式返回,适用于电商数据分析与运营。本文提供Python调用示例,实现快速接入与数据解析。
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
1220 19
|
12月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
484 4
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异
|
机器学习/深度学习 算法 API
淘宝图片搜索接口技术解析与Python实现
淘宝图片搜索接口(拍立淘)基于图像识别技术,允许用户上传商品图片查找相似或相同商品。自2014年上线以来,已服务数千万日活用户,显著提升购物体验。接口通过CNN、ANN等技术实现图像预处理、特征提取与相似度匹配,支持多种调用方式与参数设置。本文提供Python调用示例,便于开发者快速集成。
|
传感器 算法 数据挖掘
Python时间序列平滑技术完全指南:6种主流方法原理与实战应用
时间序列数据分析中,噪声干扰普遍存在,影响趋势提取。本文系统解析六种常用平滑技术——移动平均、EMA、Savitzky-Golay滤波器、LOESS回归、高斯滤波与卡尔曼滤波,从原理、参数配置、适用场景及优缺点多角度对比,并引入RPR指标量化平滑效果,助力方法选择与优化。
2792 0
|
数据采集 机器学习/深度学习 数据可视化
Python量化交易:结合爬虫与TA-Lib技术指标分析
Python量化交易:结合爬虫与TA-Lib技术指标分析
|
数据采集 自然语言处理 分布式计算
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合

推荐镜像

更多