filecmp.dircmp实现递归比对两个目录
使用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_filesglobal number_left_onlyglobal number_right_onlyfor name in dcmp.diff_files:print("diff_file found: %s/%s" % (dcmp.left, name))number_different_files += 1for name_left in dcmp.left_only:print("left_only found: %s/%s" % (dcmp.left, name_left))number_left_only += 1for name_right in dcmp.right_only:print("right_only found: %s/%s" % (dcmp.right, name_right))number_right_only += 1for 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 == 0and 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脚本使用举例:
filecmp.dircmp实现递归比对两个目录相关推荐
- 用递归法求两个数的最大公约数
用递归法求两个数的最大公约数 求两个数的最大公约数的思路是,用辗转现除法 辗转相除法求两个数的最大公约数的步骤如下: 先用小的一个数除大的一个数,得第一个余数: 再用第一个余数除小的一个数,得第二个余 ...
- 递归和循环两种方法完成树的镜像转换
/* copyright@nciaebupt 转载出处:http://blog.csdn.net/nciaebupt/article/details/8506038 题目:输入一颗二元查找树,将该树转 ...
- 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: [实验案例3:函数的递归调用] 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数. [实验指导] 分析:m.n为两 ...
- 分别采用递归和非递归方式编写两个函数,求一棵二叉树中叶子节点个数
分别采用递归和非递归方式编写两个函数,求一棵二叉树中叶子节点个数 #include #include #define MAXSIZE 50 typedef char datatype; typedef ...
- 【文件和递归】File:创建功能,删除功能,重命名功能,判断功能,基本获取功能,高级获取功能,断有没有.png后的文件,递归:归注意事项,用代码求出实现5的阶乘,不死神兔案例,递归删除带内容的目录
一. 文件 我们想要实现IO操作,就必须要知道硬盘上文件的表现形式 Java提供了一个类让我们操作硬盘上的文件:File File也就是文件表现形式 1.File:文件和目录(文件夹)路径名的抽象表示 ...
- .. 相对目录php,php 计算两个目录的相对路径
计算两个目录的相对路径,网上有好多代码,发现好多是用array_diff_assoc这个函数,这样不对. /** * Created by PhpStorm. * User: 优美代码 * Date: ...
- 使用python对比两个目录下的文件名差异
前言 在做深度学习图像识别相关的项目,经常会使用到标注工具对图像进行标注,然后会在对应文件夹下生成文件名相同的标签文件,比如000023.jpg,标注后会生成000023.xml,或都000023.t ...
- 用 Python 对比两个目录下的内容,并生成 Json 文件
一.背景 两个文件夹下,可能有相同名字的文件,也可能有不同名字的文件,相同名字的文件也有可能内容不同,因此需要对比,将结果输出到 Json 文件. 二.思路 先获取两个目录,然后分别遍历目录下的所有文 ...
- linux比较两个目录的差异
diff 给定两个目录,如何找出哪些文件因内容不同 > diff --brief --recursive dir1/ dir2/ --brief仅显示有无差异 或者使用 > diff -q ...
- 怎么使用Diff和Meld工具发现两个目录间的不同之处
在之前的一篇文章里,我们回顾了 Linux 下 9 个最好的文件比较工具,本篇文章中,我们将会描述在 Linux 下怎样找到两个目录之间的不同. 一般情况下,要在 Linux 下比较两个文件,我们会使 ...
最新文章
- 32位系统和64位系统的辨别
- SQL Server通过动态视图里查找阻塞超过30秒的会话
- 借助 Subversion 进行版本控制
- C++ 模板(template) 的定义
- java中大数开方_大数开方(Java版)
- linux上的那些查找的命令
- android ——多线程编程
- hadoop SecondNamenode
- 女车主车顶控诉“特斯拉刹车失灵”,结果被大汉抬走!车展变维权现场...
- C/C++中static关键字的作用
- 惠普打印机驱动安装找不到打印机
- 全志F1C100s使用记录:资料索引与基础说明
- centos时间同步方案
- 爱站网关键词挖掘查询工具-批量网站关键词挖掘导出软件免费下载
- 计算机制作通知的具体步骤,关于举办2018年镇江市中小学电脑制作活动的通知...
- linux开机出现initramfs无法进入系统
- python之使用cmd命令行写程序
- Python Tutorial中英双语对照文档5
- artifact is missing.
- 老调重弹-access注入过主机卫