1、两个字符串对比

import difflib
text1=""" test1 #定义字符串
hellow
my name is machanwei!
difflib document v7.4
add str
"""
text1_lines=text1.splitlines() #以行进行分隔,以便进行对比
text2="""text2: #定义字符串2
hellow
my name is machangwei!
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)))

对比程序

执行结果:

- + 好像分别代表不同的文本,来区分文本用。这里-是1的,+是文本2的。?是有区别的地方,有区别的地方会标记箭头,只有-没有+,也就是不是成对出现应该是只有某一方有文本

2、对比文件生成html文档

执行生成html语句

(venv) D:\python_mcw>python python自动化运维书\difflib模块学习.py >>..\diffres.html

挺好对比的

import difflib
text1=""" test1 #定义字符串
hellow
my name is machanwei!
difflib document v7.4
add str
"""
text1_lines=text1.splitlines() #以行进行分隔,以便进行对比
text2="""text2: #定义字符串2
hellow
my name is machangwei!
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))) #替换成下面这些:
d=difflib.HtmlDiff()
print(d.make_file(text1_lines,text2_lines))

上面的程序

3、对比文件差异

[root@hecs-358404 ~]# cat mcw.py
# __*__ coding:utf-8 _*_
#!/usr/bin/env python
import difflib
import sys try:
mcwfile1=sys.argv[1] #第一个配置文件路径参数
mcwfile2=sys.argv[2] #第二个配置文件路径参数
except Exception as e:
print("Error:"+str(e))
print("Usage: mcw.py mcwfile1 mcwfile2")
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 mcwfile1=="" or mcwfile2=="":
print("Usage: mcw.py mcwfile1 mcwfile2")
sys.exit()
text1_lines=readfile(mcwfile1) #调用函数,获取分隔后的字符串
text2_lines=readfile(mcwfile2)
d=difflib.HtmlDiff()
print d.make_file(text1_lines,text2_lines)

对比程序

server {

       listen       80;

       server_name  blog.etiantian.org;

       location / {

                root   html/blog;

                index  index.html index.htm;

          }

        location ~* .*\.(php|php5)?$ {

          root html/blog;

              fastcgi_pass  127.0.0.1:9000;

              fastcgi_index index.php;

              include fastcgi.conf;

          }

}

文件1

#server {

       listen       80;

            server_name  blog.etiantian.org;

       location / {

                root   html/blog;

                index  index.html index.htm;

          }

        machangwei
location ~* .*\.(php|php5)?$ { root html/blog; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; }
fffffff
}

文件2

对比结果如下:

参考书籍:自动化运维技术与最佳实践  刘天斯

difflib模块详解的更多相关文章

  1. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  2. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  3. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

  4. python中threading模块详解(一)

    python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...

  5. python time 模块详解

    Python中time模块详解 发表于2011年5月5日 12:58 a.m.    位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...

  6. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明  一.简介 ...

  7. 小白的Python之路 day5 time,datatime模块详解

    一.模块的分类 可以分成三大类: 1.标准库 2.开源模块 3.自定义模块 二.标准库模块详解 1.time与datetime 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时 ...

  8. 小白的Python之路 day5 random模块和string模块详解

    random模块详解 一.概述 首先我们看到这个单词是随机的意思,他在python中的主要用于一些随机数,或者需要写一些随机数的代码,下面我们就来整理他的一些用法 二.常用方法 1. random.r ...

  9. Python中time模块详解

    Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...

随机推荐

  1. sqlserver 2000 insert注入的问题

    一个sql server 2000的注入点猜测语句如下:insert into t1(col1, col2, col3) values('注入点1','数据点2','xxx');注入点1的值可以通过o ...

  2. Java实现两数之和等于二十

    找出数组中两个数字之和为20的两个数 代码实现 public static void main(String[] args) { // TODO Auto-generated method stub ...

  3. postman如何解决下个接口依赖上一个接口数据

    解决思路:将上一个接口返回的数据保存起来,然后提供下个接口使用,postman中通过设置全局变量来保存数据 步骤1:在Tests中添加如下图js代码. var jsondata = JSON.pars ...

  4. 内网渗透DC-2靶场通关(CTF)

    为了更好的阅读体验,请在pc端打开我的个人博客 DC系列共9个靶场,本次来试玩一下DC-2,共有5个flag,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware ...

  5. repartition导致的广播失败,关于错误Failed to get broadcast_544_piece0 of broadcast_544

    今天一个生产环境任务出现了性能问题,,经过仔细检查发现是在一个join操作时,原设定广播右表数据广播失败,导致后续步骤进行缓慢,,报错信息 java.io.IOException: org.apach ...

  6. TStor-OneCOS ,主打专一海量对象场景

    ​谁能与你厮守终身 生活在21世纪,最常见的事莫过于更新换代了,找一款能长久适用的产品,是很多人都希望拥有的,特别是针对于云服务产品,而对象·混合云存储新增 TStor-OneCOS 就是这样一款可以 ...

  7. Convolutional Neural Network-week1编程题(TensorFlow实现手势数字识别)

    1. TensorFlow model import math import numpy as np import h5py import matplotlib.pyplot as plt impor ...

  8. 大闸蟹的 O O 第三单元日子——中测与强测的惨烈修罗场

    第三单元是大闸蟹体验及其差的一单元,鬼知道从一开始的自信慢慢到最后的自暴自弃我都经历了什么,我已经感觉到分数与gpa与头发都在渐渐和我说再见了 JML基础梳理及工具链 JML(Java Modelin ...

  9. Spring 5 中函数式web开发中的swagger文档

    Spring 5 中一个非常重要的更新就是增加了响应式web开发WebFlux,并且推荐使用函数式风格(RouterFunction和 HandlerFunction)来开发WebFlux.对于之前主 ...

  10. 【SDOI2014】数数(补)

    见 AC自动机(补坑了) [SDOI2014] 数数 简要题意:  我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为子串.例如当S={22,333,0233}时 ...