使用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 12 Python
用python找出那些被“标记”的照片
Apr 20 Python
Python实现导出数据生成excel报表的方法示例
Jul 12 Python
Python计算斗牛游戏概率算法实例分析
Sep 26 Python
Python内置模块ConfigParser实现配置读写功能的方法
Feb 12 Python
Python自定义线程类简单示例
Mar 23 Python
Python 使用PIL中的resize进行缩放的实例讲解
Aug 03 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
关于tf.reverse_sequence()简述
Jan 20 Python
python实现简单区块链结构
Apr 25 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
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
比较完整的微信开发php代码
2016/08/02 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
extJs 下拉框联动实现代码
2010/04/09 Javascript
Javascript调用C#代码
2011/01/17 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python之批量创建文件的实例讲解
2018/05/10 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
PyQt5实现简易电子词典
2019/06/25 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
Python爬取梨视频的示例
2021/01/29 Python
什么是Rollback Segment
2013/04/22 面试题
教师年度考核自我鉴定
2014/01/19 职场文书
银行员工职业规划范文
2014/01/21 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
教师一帮一活动总结
2014/07/08 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
Python合并pdf文件的工具
2021/07/01 Python