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 相关文章推荐
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
python实现逆波兰计算表达式实例详解
May 06 Python
python实现下载指定网址所有图片的方法
Aug 08 Python
Python使用matplotlib绘制余弦的散点图示例
Mar 14 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 Python
使用python实现画AR模型时序图
Nov 20 Python
python中sympy库求常微分方程的用法
Apr 28 Python
python 常见的排序算法实现汇总
Aug 21 Python
Django视图类型总结
Feb 17 Python
用python基于appium模块开发一个自动收取能量的小助手
Sep 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
javascript some()函数用法详解
2014/11/13 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
CI框架中redis缓存相关操作文件示例代码
2016/05/17 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
js下用eval生成JSON对象
2010/09/17 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
详解Vue-cli 创建的项目如何跨域请求
2017/05/18 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
Python六大开源框架对比
2015/10/19 Python
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
平民服装店创业计划书
2014/01/17 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
培训讲师开场白
2015/06/01 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
导游词之五台山
2019/10/11 职场文书
导游词之无锡唐城
2019/12/12 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python