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删除指定类型(或非指定)的文件实例详解
Jul 06 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
Jun 11 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 Python
python实现kmp算法的实例代码
Apr 03 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
使用Python为中秋节绘制一块美味的月饼
Sep 11 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
Jun 23 Python
通过代码简单了解django model序列化作用
Nov 12 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 Python
python+selenium小米商城红米K40手机自动抢购的示例代码
Mar 24 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
js 小贴士一星期合集
2010/04/07 Javascript
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
ES6中的Promise代码详解
2017/10/09 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
python 正则表达式 概述及常用字符
2009/05/04 Python
python中的错误处理
2016/04/10 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
在双python下设置python3为默认的方法
2018/10/31 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
python中round函数保留两位小数的方法
2020/12/04 Python
上班玩手机检讨书
2014/02/17 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL