Pyhton编程实践:Python自动化运维——文件与目录差异对比
小职 2017-08-18 来源 :网络 阅读 900 评论 0

摘要:本篇Pyhton编程实践教程将为大家讲解Pyhton编程的知识点,看完这篇文章会让你对Python编程的知识点有更加清晰的理解和运用。

本篇Pyhton编程实践教程将为大家讲解Pyhton编程的知识点,看完这篇文章会让你对Python编程的知识点有更加清晰的理解和运用。

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的目录差异:(先自定义目录下的文件与目录,再使用)

 1 #import filecmp 2  3 #a='/home/test/filecmp/dir1' # 左目录 4  5 #b='/home/test/filecmp/dir2' # 右目录 6  7 #dir_obj=filecmp.dircmp(a,b) 8  9 #dir_obj.report()10 11 #dir_obj.report_partial_closure()12 13 #dir_obj.report_full_closure()14 15 #print('left_list:'+str(dir_obj.left_list))16 17 #print('right_list:'+str(dir_obj.right_list))18 19 #print('common'+str(dir_obj.common))20 21 # 根据上述属性,以此类推

校验源目录与备份目录的差异:

#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()


以上,关于Pyhton的全部内容讲解完毕啦,欢迎大家继续关注!更多关于Python的干货请关注职坐标Python频道!

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程