Python自动化运维——文件与目录差异对比
Infi-chu:
http://www.cnblogs.com/Infi-chu/
模块:filecmp
安装:Python版本大于等于2.3默认自带
功能:实现文件、目录、遍历子目录的差异
常用方法:
1.单文件对比(cmp):
- 采用filecmp.cmp(f1,f2[,shallow]) 方法,[]可空
- 比较f1和f2文件,相同返回True,否则False
- shallow默认为True,意思是只根据os.stat() 方法返回的文件基本信息进行对比,即文件基本信息。当为False时,os.stat() 与文件内容同时进行校验
2.多文件对比(cmpfiles):
- 采用filecmp.cmpfiles(dir1,dir2,common[,shallow]) 方法
- 对比dir1和dir2目录给定的文件清单。
- 此方法返回文件名的三个列表:匹配、不匹配、错误
- 匹配:包含匹配的文件的列表
- 不匹配:与匹配相反
- 错误:目录不存在文件、不具备读权限或其他原因导致的不能比较的文件清单
3.目录对比(dircmp):
- 使用dircmp(a,b[,ignore[,hide]]) 类创建一个目录比较对象
- a和b是参加比较的目录名;
- ignore代表文件名忽略的列表,默认为['RCS','CVS','tags'];
- hide代表隐藏的列表,默认为[os.curdir,os.pardir]。
- dircmp类可以获得目录较为详细的信息
- dircmp提供了三个输出报告的方法:
- report(),比较当前指定目录中的内容
- report_partial_closure(),比较当前指定目录及第一级子目录中的内容
- report_full_closure(),递归比较所有指定目录的内容
- dircmp为输出提供了更加详细的比较结果,提供了如下属性:
- left,左目录,如上述的a
- right,右目录,如上述的b
- left_list,左目录中的文件及目录列表
- right_list,右目录中的文件及目录列表
- common,两边目录共同存在的文件或目录
- left_only,只在左目录中的文件或目录
- right_only,只在右目录中的文件或目录
- common_dirs,两边目录都存在的子目录
- common_files,两边目录都存在的子文件
- common_funny,两边目录都存在的子目录(不同目录类型或os.stat()记录的错误)
- same_files,匹配相同的文件
- diff_files,不匹配的文件
- funny_files,两边目录中都存在,但无法比较的文件
- subdirs,将common_dirs目录名映射到新的dircmp对象,格式是字典类型
比较dir1和dir2的目录差异:(先自定义目录下的文件与目录,再使用)
#import filecmp
#a='/home/test/filecmp/dir1' # 左目录
#b='/home/test/filecmp/dir2' # 右目录
#dir_obj=filecmp.dircmp(a,b)
#dir_obj.report()
#dir_obj.report_partial_closure()
#dir_obj.report_full_closure()
#print('left_list:'+str(dir_obj.left_list))
#print('right_list:'+str(dir_obj.right_list))
#print('common'+str(dir_obj.common))
# 根据上述属性,以此类推
校验源目录与备份目录的差异:
#import os
#import sys
#import filecmp
#import re
#import shutil
#
#holderlist=[]
#
#def compare(dir1,dir2): # 递归获取更新项
# dircomp=filecmp.dircmp(dir1,dir2)
# only_in_one=dircomp.left_only # 源目录更新文件或目录
# diff_in_one=dircomp.diff_files # 不匹配文件,源目录文件已发生变化
# dirpath=os.path.abspath(dir1) # 定义源目录绝对路径
# # 将更新文件名或目录追加到holderlist
# [holderlist.append(os.path.abspath(os.path.join(dir1,x))) for x in only_in_one]
# [holderlist.append(os.path.abspath(os.path.join(dir1,x))) for x in diff_in_one]
# if len(dircomp.common_dirs) > 0: # 判断目录是否存在相同子目录,便于递归
# for item in dircomp.common_dirs: # 递归子目录
# compareme(os.path.abspath(os.path.join(dir1,item)), \
# os.path.abspath(os.path.join(dir2,item)))
# return holderlist
#
#def main:
# if len(sys.argv) > 2: # 要求输入源目录与备份目录
# dir1=sys.argv[1]
# dir2=sys.argv[2]
# else:
# print('使用:',sys.argv[0],'源目录 备份目录')
# sys.exit()
# source_files=compareme(dir1,dir2) # 对比两个目录
# dir1=os.path.abspath(dir1)
# if not dir2.endswith('/'):
# dir2=dir2+'/' # 备份目录路径加'/' 符
# dir2=os.path.abspath(dir2)
# destination_files=[]
# createdir_bool=False
#
# for item in source_files: # 遍历返回的差异文件或目录清单
# destination_dir=re.sub(dir1,dir2,item) # 将源目录差异路径清单对应替换成备份目录
# destination_files.append( destination_dir)
# if os.path.isdir(item): # 如果差异路径为目录且不存在,则在备份目录中创建
# if not os.path.exists(destination_dir):
# os.makedirs(destination_dir)
# createdir_bool=True
# if createdir_bool: # 重新调用,重新遍历新创建目录的内容
# destination_files=[]
# source_files=[]
# source_files=compareme(dir1,dir2)
# for item in source_files: # 获取源目录差异路径清单,对应替换成备份目录
# destination_dir=re.sub(dir1,dir2,item)
# destination_files.append(destination_dir)
# print('更新项:')
# print(source_files) # 输出更新项列表清单
# copy_pair=zip(source_files,destination_files) # 将源目录与备份目录文件清单差分成元组
# for item in copy_pair:
# if os.path.isfile(item[0]): # 判断是否是文件,然后进行复制操作
# shutil.copyfile(item[0],item[1])
#
#if __name__='__main__':
# main()
Python自动化运维——文件与目录差异对比的更多相关文章
- Python自动化运维——文件内容差异对比
Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:difflib 安装:Python版本大于等于2.3系统自带 功能:对比文本之间的差异,而且支持输出可读性比 ...
- python 自动化运维项目_目录
微信小程序监控界面 CMDB 跳板机 代码上线系统 网站用户访问质量监测 分布式监控 Docker自动化管理平台 Openstack二次开发
- 【目录】Python自动化运维
目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...
- Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|
内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...
- python自动化运维学习第一天--day1
学习python自动化运维第一天自己总结的作业 所使用到知识:json模块,用于数据转化sys.exit 用于中断循环退出程序字符串格式化.format字典.文件打开读写with open(file, ...
- 《Python自动化运维之路》 业务服务监控(二)
文件内容差异对比方法 使用diffie模块实现文件内容差异对比.dmib作为 Python的标准库模块,无需安装,作用是对比文本之间的差异,且支持输出可读性比较强的HTML文档,与 Linux下的di ...
- python自动化运维之CMDB篇-大米哥
python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ ...
- Day1 老男孩python自动化运维课程学习笔记
2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...
- python自动化运维篇
1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...
随机推荐
- Selenium2学习(十四)-- 加载Firefox配置
前言有小伙伴在用脚本启动浏览器时候发现原来下载的插件不见了,无法用firebug在打开的页面上继续定位页面元素,调试起来不方便 . 加载浏览器配置,需要用FirefoxProfile(profile_ ...
- I want to be a Great Web Front-end Developer
有时觉得特别的浮躁,可能是每天春运般的挤地铁,随处可见因为一点小磕小蹭吹胡子瞪眼睛的人,可能是身边的人貌似一下子都好有钱,买房买车或者买第N套房. 很想静下来心寻找到自己inner pace,但是忽然 ...
- (String)、toString()与String.valueOf()的区别
(String).Object.toString()正常情况下跟String.valueOf()没有区别. 但当Object是null的时候.toString会抛出异常.valueOf返回" ...
- OC property(声明)
@interface Student : NSObject { int _age; int _no; float _height; } // 当编译器遇到@property时,会自动展开成getter ...
- Wannafly挑战赛1,2
做了好久了,今天大佬讲题,好厉害,弱鸡只会几道水题. Treepath 给定一棵n个点的树,问其中有多少条长度为偶数的路径.路径的长度为经过的边的条数.x到y与y到x被视为同一条路径.路径的起点与终点 ...
- 2018.11.28 OGNL表达式与struts2框架结合的体现---在配置文件中体现(补充)
Demo3Action配置 struts.xml 主配置文件配置 地址栏输入 http://localhost:8080/StrutsDay03/Demo3Action 对于主配置的文件参数而言,如果 ...
- VirtualBox改变虚拟硬盘位置
原本放虚拟硬盘的位置容量不足,因此将原来的虚拟硬盘放到了一个相对空闲的分区.设置虚拟硬盘位置时出现一点小问题,解决过程记录如下. 1. 将虚拟硬盘复制到目标位置后,假设为“F:\Ubuntu 16.0 ...
- An error occurred during the installation of assembly 'Microsoft.VC90.ATL or 'Microsoft.VC80.ATL'
An error occurred during the installation of assembly 'Microsoft.VC90.ATL or 'Microsoft.VC80.ATL' 下载 ...
- python—递归函数
递归函数 定义:即在函数定义中自己调用自己 递归就是在过程或函数中自我调用 递归必须有递归出口,即递归结束条件 举个栗子-阶乘: def fact(n): if n == 1: return 1 re ...
- 关于css透明度的问题
先看background和background-color background:可以设置背景颜色,背景图片,还有定位.默认background:no-repeat; background-color ...