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中的JSON使用
Apr 28 Python
Python生成密码库功能示例
May 23 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
在Python中使用gRPC的方法示例
Aug 08 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
python批量识别图片指定区域文字内容
Apr 30 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
python变量命名的7条建议
Jul 04 Python
python 循环数据赋值实例
Dec 02 Python
pandas统计重复值次数的方法实现
Feb 20 Python
Python Pandas模块实现数据的统计分析的方法
Jun 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
php header示例代码(推荐)
2010/09/08 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
vue实现通讯录功能
2018/07/14 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python解释执行原理分析
2014/08/22 Python
详解python持久化文件读写
2019/04/06 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
曼城官方网上商店:Manchester City
2019/09/10 全球购物
八一建军节部队活动方案
2014/02/04 职场文书
推荐信范文大全
2015/03/27 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python