使用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实现倒计时的示例
Feb 14 Python
python如何使用unittest测试接口
Apr 04 Python
对pandas数据判断是否为NaN值的方法详解
Nov 06 Python
Python 2/3下处理cjk编码的zip文件的方法
Apr 26 Python
Python多线程threading模块用法实例分析
May 22 Python
通过pycharm使用git的步骤(图文详解)
Jun 13 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 Python
Django框架安装方法图文详解
Nov 04 Python
python创建学生成绩管理系统
Nov 22 Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 Python
django正续或者倒序查库实例
May 19 Python
Python matplotlib模块及柱状图用法解析
Aug 10 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实现小型站点广告管理
2006/10/09 PHP
分享php分页的功能模块
2015/06/16 PHP
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
Vue实现手机计算器
2020/08/17 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
vue实现滚动鼠标滚轮切换页面
2020/12/13 Vue.js
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
Python深入学习之上下文管理器
2014/08/31 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
什么是python的必选参数
2020/06/21 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
销售行政专员岗位职责
2014/06/10 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
springboot用户数据修改的详细实现
2022/04/06 Java/Android
Consul在linux环境的集群部署
2022/04/08 Servers