使用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实现baidu hi自动登录的代码
Feb 10 Python
跟老齐学Python之编写类之二方法
Oct 11 Python
跟老齐学Python之模块的加载
Oct 24 Python
Python中操作mysql的pymysql模块详解
Sep 13 Python
python tools实现视频的每一帧提取并保存
Mar 20 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
Aug 06 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
keras tensorflow 实现在python下多进程运行
Feb 06 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
Matlab中plot基本用法的具体使用
Jul 17 Python
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 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_Flame(Version:Progress)的原代码
2006/10/09 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
smarty中js的调用方法示例
2014/10/27 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
浅谈js script标签中的预解析
2016/12/30 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
用实例说明python的*args和**kwargs用法
2013/11/01 Python
python中while和for的区别总结
2019/06/28 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
介绍一下write命令
2014/08/10 面试题
高中军训广播稿
2014/01/14 职场文书
初三学生个人自我评定
2014/04/06 职场文书
联谊活动总结
2014/08/28 职场文书
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
MySQL数据库之存储过程 procedure
2022/06/16 MySQL