使用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 18 Python
Python3实现从文件中读取指定行的方法
May 22 Python
Python实现的文本简单可逆加密算法示例
May 18 Python
python使用xslt提取网页数据的方法
Feb 23 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
Python流程控制 if else实现解析
Sep 02 Python
python查看数据类型的方法
Oct 12 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
May 11 Python
python通过cython加密代码
Dec 11 Python
如何用python 操作zookeeper
Dec 28 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 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常用代码大全(新手入门必备)
2010/06/29 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
2016/04/05 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
Python实现PS图像调整黑白效果示例
2018/01/25 Python
一行Python代码过滤标点符号等特殊字符
2019/08/12 Python
python基于TCP实现的文件下载器功能案例
2019/12/10 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
为什么需要版本控制
2016/10/28 面试题
成龙霸王洗发水广告词
2014/03/14 职场文书
六五普法规划实施方案
2014/03/21 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
给病人的慰问信
2015/03/23 职场文书
2016党校培训心得体会
2016/01/07 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书