Infi-chu:

http://www.cnblogs.com/Infi-chu/

模块:filecmp

安装:Python版本大于等于2.3默认自带

功能:实现文件、目录、遍历子目录的差异

常用方法:

1.单文件对比(cmp):

  1. 采用filecmp.cmp(f1,f2[,shallow]) 方法,[]可空
  2. 比较f1和f2文件,相同返回True,否则False
  3. shallow默认为True,意思是只根据os.stat() 方法返回的文件基本信息进行对比,即文件基本信息。当为False时,os.stat() 与文件内容同时进行校验

2.多文件对比(cmpfiles):

  1. 采用filecmp.cmpfiles(dir1,dir2,common[,shallow]) 方法
  2. 对比dir1和dir2目录给定的文件清单。
  3. 此方法返回文件名的三个列表:匹配、不匹配、错误
  4. 匹配:包含匹配的文件的列表
  5. 不匹配:与匹配相反
  6. 错误:目录不存在文件、不具备读权限或其他原因导致的不能比较的文件清单

3.目录对比(dircmp):

  1. 使用dircmp(a,b[,ignore[,hide]]) 类创建一个目录比较对象
  2. a和b是参加比较的目录名;
  3. ignore代表文件名忽略的列表,默认为['RCS','CVS','tags'];
  4. hide代表隐藏的列表,默认为[os.curdir,os.pardir]。
  5. dircmp类可以获得目录较为详细的信息
  6. dircmp提供了三个输出报告的方法:
    1. report(),比较当前指定目录中的内容
    2. report_partial_closure(),比较当前指定目录及第一级子目录中的内容
    3. report_full_closure(),递归比较所有指定目录的内容
  7. dircmp为输出提供了更加详细的比较结果,提供了如下属性:
    1. left,左目录,如上述的a
    2. right,右目录,如上述的b
    3. left_list,左目录中的文件及目录列表
    4. right_list,右目录中的文件及目录列表
    5. common,两边目录共同存在的文件或目录
    6. left_only,只在左目录中的文件或目录
    7. right_only,只在右目录中的文件或目录
    8. common_dirs,两边目录都存在的子目录
    9. common_files,两边目录都存在的子文件
    10. common_funny,两边目录都存在的子目录(不同目录类型或os.stat()记录的错误)
    11. same_files,匹配相同的文件
    12. diff_files,不匹配的文件
    13. funny_files,两边目录中都存在,但无法比较的文件
    14. 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自动化运维——文件与目录差异对比的更多相关文章

  1. Python自动化运维——文件内容差异对比

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:difflib 安装:Python版本大于等于2.3系统自带 功能:对比文本之间的差异,而且支持输出可读性比 ...

  2. python 自动化运维项目_目录

    微信小程序监控界面 CMDB 跳板机 代码上线系统 网站用户访问质量监测 分布式监控 Docker自动化管理平台 Openstack二次开发

  3. 【目录】Python自动化运维

    目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...

  4. Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|

    内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...

  5. python自动化运维学习第一天--day1

    学习python自动化运维第一天自己总结的作业 所使用到知识:json模块,用于数据转化sys.exit 用于中断循环退出程序字符串格式化.format字典.文件打开读写with open(file, ...

  6. 《Python自动化运维之路》 业务服务监控(二)

    文件内容差异对比方法 使用diffie模块实现文件内容差异对比.dmib作为 Python的标准库模块,无需安装,作用是对比文本之间的差异,且支持输出可读性比较强的HTML文档,与 Linux下的di ...

  7. python自动化运维之CMDB篇-大米哥

    python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ  ...

  8. Day1 老男孩python自动化运维课程学习笔记

    2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...

  9. python自动化运维篇

    1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...

随机推荐

  1. [Err] 1214 - The used table type doesn't support FULLTEXT indexes

    -- -- Table structure for table `film_text` -- -- InnoDB added FULLTEXT support in 5.6.10. If you us ...

  2. 实现两个N×N矩阵的乘法,矩阵由一维数组表示

    此题的关键在于找到矩阵乘法的不变式! 例如: 矩阵a × 矩阵b = 矩阵ab 1 2 5 6 × 3 4 7 8 显然 ab[0] = a[0] * b[0] + a[1] * b[2] ab[1] ...

  3. adb工具包使用方法

    ADB工具包总共有四个文件,两个exe后缀,两个dll后缀.里面还带有fastboot.exe下载后在PC上安装,如安装到D:\adb_tools-2.0目录,确认目录中带有fastboot.exe文 ...

  4. SVN:验证位置时发生错误解决方案

    1. 2. 3.preferencens > svn >svn接口-选择SVNKit(Pure Java)设置后,再引用svn路径后,直接弹出输入用户名和密码就对了. 4.

  5. PHP:使用php,循环html中的select标签与Php数据

    select标签,我们都知道是下拉列表,这里,我们使用foreach循环,将select中的数据进行输出 例子: 1.数据表:mimi_article,表中有个字段,为1或0,表示着是或否 2.通过p ...

  6. python中的 if __name__ == “__main__”: 有什么用

    https://stackoverflow.com/questions/419163/what-does-if-name-main-do# 问题: What does if name == " ...

  7. 每天一个linux命令(22):tar命令

    通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar命令可以为linux ...

  8. SpringBoot 使用(三): 配置文件详解

    代码从开发到测试要经过各种环境,开发环境,测试环境,demo环境,线上环境,各种环境的配置都不一样,同时要方便各种角色如运维,接口测试, 功能测试,全链路测试的配置,hardcode 肯定不合适,如S ...

  9. maven项目发布到Tomcat丢失jar包

    昨天看了一篇tomcat设置的文章,说要把第一个勾上,这样不需要更新到tomcat.  一启动tomcat就发现丢包.后来在网上看了许多文章,说要update maeven项目,然后你就会发现启动过程 ...

  10. 【luogu P1640 [SCOI2010]连续攻击游戏】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1640 数据有点水吧,从属性值连向对应武器编号. 枚举属性值匹配,遇到第一个无法匹配的直接跳出就好惹~. #i ...