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抽象基类用法实例分析
Jun 04 Python
各个系统下的Python解释器相关安装方法
Oct 12 Python
Python中str.join()简单用法示例
Mar 20 Python
python3+PyQt5使用数据库窗口视图
Apr 24 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
如何更改 pandas dataframe 中两列的位置
Dec 27 Python
pytorch实现特殊的Module--Sqeuential三种写法
Jan 15 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
python实现图片,视频人脸识别(opencv版)
Nov 18 Python
python 邮件检测工具mmpi的使用
Jan 04 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
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
PHP图片上传代码
2013/11/04 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
jcrop基本参数一览
2013/07/16 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
Javascript之String对象详解
2016/06/08 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
关于Python中浮点数精度处理的技巧总结
2017/08/10 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
Python模块的加载讲解
2019/01/15 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
解决Python中回文数和质数的问题
2019/11/24 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
面试求职的个人自我评价
2013/11/16 职场文书
电子信息毕业生自荐信
2013/11/16 职场文书
英文请假条
2014/04/11 职场文书
教师四风问题整改措施
2014/09/25 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
佛光寺导游词
2015/02/10 职场文书
追悼词范文大全
2015/06/23 职场文书
五年级数学教学反思
2016/02/16 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
浅析JavaScript中的变量提升
2022/06/01 Javascript