文件内容差异对比

difflib为python的标准库模块,无需安装。作用时对比文本之间的差异。并且支持输出可读性比较强的HTML文档,与LInux下的diff 命令相似。在版本控制方面非常有用。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author: 小祎 import difflib
text1 = """ #定义字符串1
user www www;
worker_processes 2; error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; pid logs/nginx.pid; events {
use epoll;
worker_connections 2048;
} http {
include mime.types;
default_type application/octet-stream; server {
listen 80;
server_name itoatest.example.com;
root /apps/oaapp; charset utf-8;
access_log logs/host.access.log main; """
text1_lines = text1.splitlines() #以行进行分割 text2 = """ #定义字符串2
user www www;
worker_processes 2; error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; pid logs/nginx.pid; events {
use epoll;
worker_connections 2000;
} http {
include mime.types;
default_type application/octet-stream; server {
listen 80;
server_name itoatest.example.com;
root /apps/oaapp; charset utf-8;
access_log logs/host.access.log main; """
text2_lines = text2.splitlines() d = difflib.Differ()#创建Differ对象
diff = d.compare(text1_lines,text2_lines)
print('\n'.join(list(diff)))
符号 含义
'-' 包含在第一个系列行中,但不包含第二个。
'+' 包含在第二个系列行中,但不包含第一个。
' ' 两个系列行一致
'?' 存在增量差异
'^' 存在差异字符

生成对比HTML格式 文档

  使用HtmlDiff()类的make_file()方法生成HTML文档

#对上面代码修改

# d = difflib.Differ()#创建Differ对象
# diff = d.compare(text1_lines,text2_lines)
# print('\n'.join(list(diff))) d = difflib.HtmlDiff()
print(d.make_file(text1_lines,text2_lines))

 python xxx.py > diff.html

对比Nginx配置文件差异脚本

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#Author: guhf import difflib
import string
import sys try:
textfile1 = sys.argv[1]
textfile2 = sys.argv[2]
except Exception:
print("Error:" + str(e))
print("Usage: xxxx.py filename1 filename2")
sys.exit()
def readfile(filename):
try:
fileHandle = open(filename,'r')
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:test.py filename1 filename2")
sys.exit() text1_lines = readfile(textfile1)
text2_lines = readfile(textfile2) d = difflib.HtmlDiff()
print(d.make_file(text1_lines,text2_lines))

  

python---difflib的更多相关文章

  1. python difflib详解

    difflib -帮助进行差异化比较 这个模块提供的类和方法用来进行差异化比较,它能够生成文本或者html格式的差异化比较结果,如果需要比较目录的不同,可以使用filecmp模块. class dif ...

  2. python difflib.md

    difflib 此模块提供了用于比较序列的类和函数.它可以用于例如比较文件,并且可以产生各种格式的差异信息,包括HTML和上下文以及统一差异. difflib 模块包含用于计算和处理序列间差异的工具. ...

  3. Python 之 Difflib

    Python 之 Difflib 2017年7月8日 word文档地址:https://wenku.baidu.com/view/36692440854769eae009581b6bd97f19237 ...

  4. 【Python】 文件目录比较工具filecmp和difflib

    在一些运维场景中,常常需要比较两个环境中的应用目录结构(是否有文件/目录层面上的增删)以及比较两个环境中同名文件内容的不同(即文件层面上的改).Python自带了两个内建模块可以很好地完成这个工作,f ...

  5. 使用Python自带difflib模块进行文件内容差异对比

    difflib_text.py #!/usr/bin/python import difflib import sys try: textfile1=sys.argv[1] textfile2=sys ...

  6. python运维开发常用模块(四)文件对比模块difflib

    1.difflib介绍 difflib作为 Python的标准库模块,无需安装,作用是对比文本之间的差异,且支持 输出可读性比较强的HTML文档,与Linux下的diff命令相似.我们可以 使用dif ...

  7. python利用difflib判断两个字符串的相似度

    我们再工作中可能会遇到需要判断两个字符串有多少相似度的情况(比如抓取页面内容存入数据库,如果相似度大于70%则判定为同一片文章,则不录入数据库) 那这个时候,我们应该怎么判断呢? 不要着急,pytho ...

  8. difflib python

    difflib -帮助进行差异化比较 这个模块提供的类和方法用来进行差异化比较,它能够生成文本或者html格式的差异化比较结果,如果需要比较目录的不同,可以使用filecmp模块. 例子: # -*- ...

  9. Python 资源大全中文版

    Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列 ...

  10. ubuntu下安装python各类运维用模块(以后补充用途)

    环境:ubuntu 16.04LTS,python3,python2 已安装:pip3,pip2 注:基于Python自动化运维这本书上介绍的各模块而来 1.python-rrdtool(just f ...

随机推荐

  1. js单击自动选择文本

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  2. Caffe.proto使用

    参考 http://blog.csdn.net/qq_16055159/article/details/45115359 书写.proto文件 作用:编写一个 proto 文件,定义我们程序中需要处理 ...

  3. map 容器的使用

    C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明    1   头文件   #include   <map> ...

  4. 前台给后台传JSON字符串,后台解析并保存

    前台 function BMSure() { var DanWeiName = $("[id$='BusinessName']").val(); var Address = $(& ...

  5. 备受SQL青睐的“1”

    写在前面:所用sql语句皆是在oracle 11g r1 数据库中实验. 在sql书写中,经常会用到数字1,例如 count(1),select 1, where 1=1等等,这样做有何好处呢?下面我 ...

  6. css常用公共样式

    /*style reset*/ body,ul,p,h1,h2,h3,h4,h5,h6,dl,dd,form,input,textarea,select{padding:0; margin:0;fon ...

  7. textarea关于空格和换行那点事

    textarea中空格连续输入多个的情况下,数据回显的时候页面只是显示一个:换行同样有问题,在textarea中有换行,在页面上却没有,今天终于看到个写的比较具体的文章,拿过来收藏下. 地址链接: h ...

  8. js MATH

    MATH Math 对象用于执行数学任务. 无需创建它,通过把 Math 作为对象使用就可以调用其所有属性和方法. Math 对象属性 var a=Math.E; //输出2.718281828459 ...

  9. centos x86_64环境下 下载chrome

    由于Cent OS内核版本过低,无法安装Chrome浏览器2.替代方案:可以使用Chromium浏览器 1.切换到root: su - 或者 sudo -i 2.下载新的软件源定义: cd /etc/ ...

  10. 【OPENGL】第三篇 着色器基础(一)

    在这一章,我们会学习什么是着色器(Shader),什么是着色器语言(OpenGL Shading Language-GLSL),以及着色器怎么和OpenGL程序交互. 首先我们先来看看什么叫着色器. ...