使用Python进行目录的对比方法


Posted in Python onNovember 01, 2018

如果进行单个文件的比较,可以使用difflib模块。虽然filecmp模块也能够进行单个文件的对比,但是前者能够提供观感更好的报告。如果我们只是想看一下两个目录中的某个文件是否一致而不关系其中的内容,那么后者或许是更改选的选择。

如果进行目录的对比,那么可以使用filecmp模块了。

在IPython中进行简单的命令交互演示功能如下:

In [1]: import filecmp

In [2]: ls

Chapter_01/ Chapter_02/

In [3]: dirobj = filecmp.dircmp('Chapter_01','Chapter_02')

输出两个目录差异报告

In [4]: dirobj.report()

diff Chapter_01 Chapter_02

Only in Chapter_01 : ['ip.py', 'os_mem.py', 'pid.py']

Only in Chapter_02 : ['d1.py', 'd2.py', 'diff.py', 'diff.zip', 'dns_parser.py', 'join.py', 'pydiff.py', 'report.html']

Identical files : ['c01.py']

输出部分报告(最外面的目录曾经,这里与第一个无差异是因为没有子目录)

In [5]: dirobj.report_partial_closure()

diff Chapter_01 Chapter_02

Only in Chapter_01 : ['ip.py', 'os_mem.py', 'pid.py']

Only in Chapter_02 : ['d1.py', 'd2.py', 'diff.py', 'diff.zip', 'dns_parser.py', 'join.py', 'pydiff.py', 'report.html']

Identical files : ['c01.py']

输出全部报告

In [6]: dirobj.report_full_closure()

diff Chapter_01 Chapter_02

Only in Chapter_01 : ['ip.py', 'os_mem.py', 'pid.py']

Only in Chapter_02 : ['d1.py', 'd2.py', 'diff.py', 'diff.zip', 'dns_parser.py', 'join.py', 'pydiff.py', 'report.html']

Identical files : ['c01.py']

查看一下输出结果对象格式,这个格式略显奇怪了一些

In [7]: type(dirobj.report_full_closure())

diff Chapter_01 Chapter_02

Only in Chapter_01 : ['ip.py', 'os_mem.py', 'pid.py']

Only in Chapter_02 : ['d1.py', 'd2.py', 'diff.py', 'diff.zip', 'dns_parser.py', 'join.py', 'pydiff.py', 'report.html']

Identical files : ['c01.py']

Out[7]: NoneType

尝试把结果对象转换为字符串

In [8]: str(dirobj.report_full_closure())

diff Chapter_01 Chapter_02

Only in Chapter_01 : ['ip.py', 'os_mem.py', 'pid.py']

Only in Chapter_02 : ['d1.py', 'd2.py', 'diff.py', 'diff.zip', 'dns_parser.py', 'join.py', 'pydiff.py', 'report.html']

Identical files : ['c01.py']

Out[8]: 'None'

输出左边目录的清单

In [9]: dirobj.left_list

Out[9]: ['c01.py', 'ip.py', 'os_mem.py', 'pid.py']

右边目录清单

In [10]: dirobj.right_list

Out[10]: 

['c01.py',

 'd1.py',

 'd2.py',

 'diff.py',

 'diff.zip',

 'dns_parser.py',

 'join.py',

 'pydiff.py',

 'report.html']

仅在右边目录中存在的文件清单

In [11]: dirobj.right_only

Out[11]: 

['d1.py',

 'd2.py',

 'diff.py',

 'diff.zip',

 'dns_parser.py',

 'join.py',

 'pydiff.py',

 'report.html']

共有的子目录

In [12]: dirobj.common_dirs

Out[12]: []

共有的文件

In [13]: dirobj.common_files

Out[13]: ['c01.py']

无法比较的目录

In [14]: dirobj.common_funny

Out[14]: []

相同的文件

In [15]: dirobj.same_files

Out[15]: ['c01.py']

无法比较的文件

In [16]: dirobj.funny_files

Out[16]: []

在MATLAB中有一个我经常使用的命令——visdiff,可以用于文件或者目录的对比。如此比较下来,Python基本上也提供了MATLAB相应命令所提供的功能。不过,MATLAB的使用更为简单,似乎也更为细致一些。不过,考虑使用Python还是有必要的。首先是Python免费,其次是启动速度大概比MATLAB快不少吧!除此之外,现在的Python凑代码也是蛮简单的,在自己需要的时候几行代码拼凑一般就能够实现自己要的功能了。

以上这篇使用Python进行目录的对比方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python斐波那契数列的计算方法
Sep 27 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
Python画图高斯分布的示例
Jul 10 Python
Django 迁移、操作数据库的方法
Aug 02 Python
PyTorch中Tensor的维度变换实现
Aug 18 Python
Python+Redis实现布隆过滤器
Dec 08 Python
python带参数打包exe及调用方式
Dec 21 Python
python集合删除多种方法详解
Feb 10 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
django 实现后台从富文本提取纯文本
Jul 02 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 Python
实例详解Python的进程,线程和协程
Mar 13 Python
详解python Todo清单实战
Nov 01 #Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 #Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 #Python
使用python获取电脑的磁盘信息方法
Nov 01 #Python
在IPython中执行Python程序文件的示例
Nov 01 #Python
在IPython中进行Python程序执行时间的测量方法
Nov 01 #Python
Python找出微信上删除你好友的人脚本写法
Nov 01 #Python
You might like
PHP模板引擎SMARTY
2006/10/09 PHP
基于php-fpm的配置详解
2013/06/03 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
jQuery 性能优化指南 (1)
2009/05/21 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
取numpy数组的某几行某几列方法
2018/04/03 Python
python实现石头剪刀布程序
2021/01/20 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
历史系自荐信范文
2013/12/24 职场文书
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
初二政治教学反思
2014/01/12 职场文书
情人节寄语大全
2014/04/11 职场文书
学习礼仪心得体会
2014/09/01 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
市场督导岗位职责
2015/04/10 职场文书