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实现探测socket和web服务示例
Mar 28 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
Sanic框架流式传输操作示例
Jul 18 Python
使用python绘制3维正态分布图的方法
Dec 29 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
Pycharm小白级简单使用教程
Jan 08 Python
Tensorflow 多线程设置方式
Feb 06 Python
Python调用接口合并Excel表代码实例
Mar 31 Python
Python flask框架如何显示图像到web页面
Jun 03 Python
使用python批量修改XML文件中图像的depth值
Jul 22 Python
Python用K-means聚类算法进行客户分群的实现
Aug 23 Python
浅谈Python中的函数(def)及参数传递操作
May 25 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
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
Tensorflow 实现修改张量特定元素的值方法
2018/07/30 Python
对python生成业务报表的实例详解
2019/02/03 Python
python爬虫增加访问量的方法
2019/08/22 Python
python打包成so文件过程解析
2019/09/28 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
应届毕业生求职信范文
2014/05/08 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
世界气象日活动总结
2015/02/27 职场文书
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏