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中degrees()方法的使用
May 18 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
Apr 09 Python
使用python在本地电脑上快速处理数据
Jun 22 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
python如何实现数据的线性拟合
Jul 19 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
python主线程与子线程的结束顺序实例解析
Dec 17 Python
基于Django实现日志记录报错信息
Dec 17 Python
Python 如何实现访问者模式
Jul 28 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
Pycharm快捷键配置详细整理
Oct 13 Python
Python软件包安装的三种常见方法
Jul 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
PHP 程序授权验证开发思路
2009/07/09 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
php的PDO事务处理机制实例分析
2017/02/16 PHP
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
下载给定网页上图片的方法
2014/02/18 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
python中模块的__all__属性详解
2017/10/26 Python
用Python实现KNN分类算法
2017/12/22 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
python pygame实现2048游戏
2018/11/20 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
Python项目跨域问题解决方案
2020/06/22 Python
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
女装和独特珠宝:Sundance Catalog
2018/09/19 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
UNIX文件系统分类
2014/11/11 面试题
参观考察邀请函范文
2014/01/29 职场文书
电子信息工程专业推荐信
2014/02/14 职场文书
商业融资计划书
2014/04/29 职场文书
2014年学生会工作总结
2014/11/07 职场文书
客服专员岗位职责
2015/02/10 职场文书
返乡农民工证明
2015/06/24 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android