使用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实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
Python Grid使用和布局详解
Jun 30 Python
Python变量类型知识点总结
Feb 18 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
django做form表单的数据验证过程详解
Jul 26 Python
python 使用pdfminer3k 读取PDF文档的例子
Aug 27 Python
Python 单例设计模式用法实例分析
Sep 23 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
Python如何把十进制数转换成ip地址
May 25 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 Python
Python 视频画质增强
Apr 28 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中Socket创建与监听实现方法
2015/01/05 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
学习ExtJS accordion布局
2009/10/08 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
2012/05/23 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
python 正则式使用心得
2009/05/07 Python
使用Python实现一个简单的项目监控
2015/03/31 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
django settings.py 配置文件及介绍
2019/07/15 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
中专生的个人自我评价
2013/12/11 职场文书
公司成立感言
2014/01/11 职场文书
2014新生大学四年计划书
2014/09/21 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
css样式important规则的正确使用方式
2022/06/10 HTML / CSS
使用Django框架创建项目
2022/06/10 Python
Fluentd搭建日志收集服务
2022/09/23 Servers