文件与目录差异对比

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

 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 # 根据上述属性,以此类推

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

  1 #import os
  2
  3 #import sys
  4
  5 #import filecmp
  6
  7 #import re
  8
  9 #import shutil
 10
 11 #
 12
 13 #holderlist=[]
 14
 15 #
 16
 17 #def compare(dir1,dir2): # 递归获取更新项
 18
 19 # dircomp=filecmp.dircmp(dir1,dir2)
 20
 21 # only_in_one=dircomp.left_only # 源目录更新文件或目录
 22
 23 # diff_in_one=dircomp.diff_files # 不匹配文件,源目录文件已发生变化
 24
 25 # dirpath=os.path.abspath(dir1) # 定义源目录绝对路径
 26
 27 # # 将更新文件名或目录追加到holderlist
 28
 29 # [holderlist.append(os.path.abspath(os.path.join(dir1,x))) for x in only_in_one]
 30
 31 # [holderlist.append(os.path.abspath(os.path.join(dir1,x))) for x in diff_in_one]
 32
 33 # if len(dircomp.common_dirs) > 0: # 判断目录是否存在相同子目录,便于递归
 34
 35 # for item in dircomp.common_dirs: # 递归子目录
 36
 37 # compareme(os.path.abspath(os.path.join(dir1,item)), \
 38
 39 # os.path.abspath(os.path.join(dir2,item)))
 40
 41 # return holderlist
 42
 43 #
 44
 45 #def main:
 46
 47 # if len(sys.argv) > 2: # 要求输入源目录与备份目录
 48
 49 # dir1=sys.argv[1]
 50
 51 # dir2=sys.argv[2]
 52
 53 # else:
 54
 55 # print(‘使用:‘,sys.argv[0],‘源目录 备份目录‘)
 56
 57 # sys.exit()
 58
 59 # source_files=compareme(dir1,dir2) # 对比两个目录
 60
 61 # dir1=os.path.abspath(dir1)
 62
 63 # if not dir2.endswith(‘/‘):
 64
 65 # dir2=dir2+‘/‘ # 备份目录路径加‘/‘ 符
 66
 67 # dir2=os.path.abspath(dir2)
 68
 69 # destination_files=[]
 70
 71 # createdir_bool=False
 72
 73 #
 74
 75 # for item in source_files: # 遍历返回的差异文件或目录清单
 76
 77 # destination_dir=re.sub(dir1,dir2,item) # 将源目录差异路径清单对应替换成备份目录
 78
 79 # destination_files.append( destination_dir)
 80
 81 # if os.path.isdir(item): # 如果差异路径为目录且不存在,则在备份目录中创建
 82
 83 # if not os.path.exists(destination_dir):
 84
 85 # os.makedirs(destination_dir)
 86
 87 # createdir_bool=True
 88
 89 # if createdir_bool: # 重新调用,重新遍历新创建目录的内容
 90
 91 # destination_files=[]
 92
 93 # source_files=[]
 94
 95 # source_files=compareme(dir1,dir2)
 96
 97 # for item in source_files: # 获取源目录差异路径清单,对应替换成备份目录
 98
 99 # destination_dir=re.sub(dir1,dir2,item)
100
101 # destination_files.append(destination_dir)
102
103 # print(‘更新项:‘)
104
105 # print(source_files) # 输出更新项列表清单
106
107 # copy_pair=zip(source_files,destination_files) # 将源目录与备份目录文件清单差分成元组
108
109 # for item in copy_pair:
110
111 # if os.path.isfile(item[0]): # 判断是否是文件,然后进行复制操作
112
113 # shutil.copyfile(item[0],item[1])
114
115 #
116
117 #if __name__=‘__main__‘:
118
119 # main()

原文地址:https://www.cnblogs.com/Infi-chu/p/8120276.html

时间: 2024-10-19 03:35:55

文件与目录差异对比的相关文章

文件与目录差异对比方法

环境: Python 2.6.6 linux系统 用到的模块:filecmp filecmp提供了:单文件对比,多文件对比,目录对比 单文件对比:采用filecmp.cmp(f1,f2[,shallow])方法,比较文件名为f1和f2的文件的内容,相同返回True,不相同返回False,shallow默认是True,意思是只根据os.stat()方法返回的文件基本信息进行对比,比如最后访问时间.修改时间.状态改变时间等,会忽略文件内容的对比.当shallow为False时,则os.stat()与

文件与目录差异对比模块filecmp

简介 当我们进行代码审计或校验备份结果时,往往需要检查原始与目标目录的文件一致性,python的标准库已经自带了满足此需求的模块filecmp.filecmp可以实现文件.目录.遍历子目录的差异对比功能.比如报告中输出目标目录比原始多出的文件或子目录,即使文件同名也会判断是否为同一个文件(内容级对比)等,python2.3以上版本自带了filecmp模块,无需额外安装. 模块常用方法说明 filecmp 提供了三个操作方法,分别为cmp(单文件对比).cmpfiles(多文件对比).dircmp

Linux 文件与目录权限对比

r(读取权限) 文件:读取文件内容的权限. 目录:具有列出目录内文件的权限. w(写入权限) 文件:新增.修改文件内容的权限. 目录:在目录内删除.移动.创建内文件的权限,需要同时具有x权限. x(执行权限) 文件:执行权限. 目录:进入目录权限.

目录差异对比

import filecmpa='d:\d1'b='d:\d2'dirobj=filecmp.dircmp(a,b)dirobj.report()dirobj.report_full_closure()dirobj.report_partial_closure()print "left_list"+str(dirobj.left_list)print "right_list"+str(dirobj.right_list)print "common"

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

Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:difflib 安装:Python版本大于等于2.3系统自带 功能:对比文本之间的差异,而且支持输出可读性比较强的HTML文档,与Linux中的diff命令比较相似. 两个字符串的差异对比: #import difflib #text1=''' #hello world. #how are you. #nice to meet you. #''' #text1_lines=text1.splitlines

difflib文件差异对比

1.两个字符串差异对比: #!/usr/bin/env python # -*- coding:utf-8 -*- import difflib text1 = '''text1: This module provides classes and functions for comparing sequences. including HTML and context and unified diffs. difflib document v7.4 add string ''' text1_li

Python学习笔记-校验源与备份目录差异

校验源与备份目录差异 有时我们无法确认备份与源目录文件是否保持一致,包括源目录中的新文件或目录.更新文件或目录有无成功同步,定期进行校验,没有成功则希望有针对性地进行补备份. 本例使用了filecmp模块的left_only.diff_files方法递归获取源目录的更新项,再通过shutil.copyfile.os.makedirs方法对更新项进行复制,最终保持一致状态. #!/usr/bin/python3 # import os import sys import filecmp impor

文件查询之三:文件和目录的批量操作

经过之前两篇的随笔已经可以将所需要的文件和目录查找出来,并且保存在一个文档中,所以现在就是利用保存文件或目录的文档来进行批量处理,对文件或目录进行批量的 删除.复制和移动.主要是用到shutil模块中的函数和os模块中的函数进行一系列的操作.shutil模块存在大量的文件操作和目录操作的函数,包括常用的移动文件或复制文件 等操作,其中os和shutil下对于函数的功能存在交集,只不过相同功能下的函数名存在差异,函数上的细节处理方面也有可能不一样.在这里主要的是讲shutil模块下的函数. 首先是

鸟哥的Linux私房菜 基础学习篇读书笔记(7):Linux文件与目录管理

这一章主要讲述的是如何操作与管理Linux系统中的文件和目录,主要包括目录间的切换,目录的创建与删除,文件的创建与删除,文件的查找,文件内容的查看等等. 前一章中已经讲过相对路径以及绝对路径,绝对路径就是指从根目录("/")开始写起的路径名,而相对路径绝不会由根目录开始写起,相反,相对路径是相对于当前工作目录的路径名.Linux操作系统中有几个特殊的目录: . 代表此层目录: .. 代表上一层目录: - 代表前一个工作目录: ~ 代表当前用户身份所在的主文件夹: ~account 代表