python filecmp.dircmp实现递归比对两个目录的方法


Posted in Python onMay 22, 2020

使用python filecmp模块的dircmp类可以很方便的比对两个目录,dircmp的用法已经有很多文章介绍,不再赘述。

可以help(filecmp.dircmp)查看帮助信息,其中提到的x.report()、x.report_partial_closure(),都只能打印两目录一级子目录的比较信息。而x.report_full_closure()可以递归打印所有子目录的比对信息,但是输出太多,大多数情况下我们可能只关心两目录的不同之处。

help(filecmp.dircmp) 摘选:            
 
 | High level usage:              
 | x = dircmp(dir1, dir2)             
 | x.report() -> prints a report on the differences between dir1 and dir2 
 |  or                 
 | x.report_partial_closure() -> prints report on differences between dir1
 |   and dir2, and reports on common immediate subdirectories.  
 | x.report_full_closure() -> like report_partial_closure,    
 |   but fully recursive.

    本文编写的脚本,重点关注并实现两个目标:

1)递归比对两个目录及其所有子目录。

2)仅输出两目录不同之处,包括文件名相同(common_files)但是文件不一致(diff_files),以及左、右目录中独有的文件或子目录。

py脚本compare_dir.py内容如下:

# -*- coding: utf-8 -*-
"""
@desc 使用filecmp.dircmp递归比对两个目录,输出比对结果以及统计信息。
@author longfeiwlf
@date 2020-5-20
"""
 
from filecmp import dircmp
import sys
 
# 定义全局变量:
number_different_files = 0 # 文件名相同但不一致的文件数
number_left_only = 0 # 左边目录独有的文件或目录数
number_right_only = 0 # 右边目录独有的文件或目录数
 
 
def print_diff(dcmp):
 """递归比对两目录,如果有不同之处,打印出来,同时累加统计计数。"""
 global number_different_files
 global number_left_only
 global number_right_only
 for name in dcmp.diff_files:
  print("diff_file found: %s/%s" % (dcmp.left, name))
  number_different_files += 1
 for name_left in dcmp.left_only:
  print("left_only found: %s/%s" % (dcmp.left, name_left))
  number_left_only += 1
 for name_right in dcmp.right_only:
  print("right_only found: %s/%s" % (dcmp.right, name_right))
  number_right_only += 1
 for sub_dcmp in dcmp.subdirs.values():
  print_diff(sub_dcmp) # 递归比较子目录
 
 
if __name__ == '__main__':
 try:
  mydcmp = dircmp(sys.argv[1], sys.argv[2])
 except IndexError as ie:
  print(ie)
  print("使用方法:python compare_dir_cn.py 目录1 目录2")
 else:
  print("\n比对结果详情: ")
  print_diff(mydcmp)
  if (number_different_files == 0 and number_left_only == 0
    and number_right_only == 0):
   print("\n两个目录完全一致!")
  else:
   print("\n比对结果统计:")
   print("Total Number of different files is: " 
     + str(number_different_files))
   print("Total Number of files or directories only in '"
     + sys.argv[1] + "' is: " + str(number_left_only))
   print("Total Number of files or directories only in '"
     + sys.argv[2] + "' is: " + str(number_right_only))

compare_dir.py脚本使用举例:

python filecmp.dircmp实现递归比对两个目录的方法

总结

到此这篇关于filecmp.dircmp实现递归比对两个目录的文章就介绍到这了,更多相关filecmp.dircmp实现递归比对两个目录内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python 字典(Dictionary)操作详解
Mar 11 Python
python生成随机验证码(中文验证码)示例
Apr 03 Python
python列表操作实例
Jan 14 Python
详解Python当中的字符串和编码
Apr 25 Python
Python Property属性的2种用法
Jun 21 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
python加载自定义词典实例
Dec 06 Python
pytorch中的自定义数据处理详解
Jan 06 Python
OpenCV中VideoCapture类的使用详解
Feb 14 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
Python生成器传参数及返回值原理解析
Jul 22 Python
Python图像处理之膨胀与腐蚀的操作
Feb 07 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 #Python
Python参数传递对象的引用原理解析
May 22 #Python
Python configparser模块常用方法解析
May 22 #Python
keras中的卷积层&池化层的用法
May 22 #Python
Keras Convolution1D与Convolution2D区别说明
May 22 #Python
Python pip安装模块提示错误解决方案
May 22 #Python
keras中的backend.clip用法
May 22 #Python
You might like
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
PHP小技巧之函数重载
2014/06/02 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
Javascript实现单例模式
2016/01/24 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
Vue的轮播图组件实现方法
2018/03/03 Javascript
React+Antd+Redux实现待办事件的方法
2019/03/14 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
机械设计及其自动化专业推荐信
2013/10/31 职场文书
广告业务员岗位职责
2014/02/06 职场文书
教师个人自我评价范文
2014/04/13 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
公司总经理岗位职责
2015/04/01 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技