本模块主要提供了对文件和文件夹进行简单的比較处理,假设须要复杂的文件比較须要使用difflib库来处理。

filecmp.cmp(f1, f2, shallow=True)

比較文件f1和文件f2,当两个文件同样时返回True,否则返回False。假设參数shallow为True,仅仅推断os.stat()函数返回内容是否同样,假设同样就返回True。否则再比較文件内容是否同样,假设同样也返回True。使用shallow參数能够高速地比較文件是否有改动过。

样例:

#python 3.4

import filecmp

r = filecmp.cmp('F:\\temp\\py\\bisect2.py', 'F:\\temp\\py\\bisect2.py')

print(r)

r = filecmp.cmp('F:\\temp\\py\\bisect2.py', 'F:\\temp\\py\\cal_1.py')

print(r)

结果输出例如以下:

True

False

filecmp.cmpfiles(dir1, dir2, common, shallow=True)

比較两个文件夹里同样文件列表的文件。參数dir1是文件夹1,參数dir2是文件夹2。參数common是比較的文件列表。參数shallow是跟上面的函数是一样意义。

本函数执行之后返回三个文件名称列表:同样列表、不同样列表、错误列表。假设文件同样放在同样列表,不同样放不同样列表。假设文件不存在某一个文件夹。就放错误列表。

样例:

#python 3.4

import filecmp

dir1 = 'F:\\temp\\py\\dir1'

dir2 = 'F:\\temp\\py\\dir2'

r = filecmp.cmpfiles(dir1, dir2,

['difflib1.py', 'difflib5.py', 'test1.txt'])

print(r)

结果输出例如以下:

(['difflib1.py'], ['difflib5.py'], ['test1.txt'])

filecmp.clear_cache()

清除文件比較缓冲区。当比較的文件不断地高速改动时,就能够使用这个函数来更新文件的信息。

class filecmp.dircmp(a, b, ignore=None, hide=None)

构造一个新的文件夹比較对象,比較文件夹a和b。參数ignore是忽略列表,是指那些文件不须要进行比較的;參数hide是隐藏的文件列表,默认是[os.curdir, os.pardir]。

这个类主要提供以下的方法:

report()

打印a和b之间的比較结果到系统sys.stdout输出。

report_partial_closure()

打印文件夹a和b。以及公共的子文件夹的比較结果到系统sys.stdout输出。

report_full_closure()

递归全部目标,包含子文件夹,把结果比較输出。

left

内部表示文件夹a。

right

内部表示文件夹b。

left_list

内部表示文件夹a经过隐藏和忽略过滤的文件和子文件夹列表。

right_list

内部表示文件夹b经过隐藏和忽略过滤的文件和子文件夹列表。

common

文件夹a和b都有的公共文件和子文件夹。

left_only

仅在文件夹a出现的文件和子文件夹。

right_only

仅在文件夹b出现的文件和子文件夹。

common_dirs

在文件夹a和文件夹b都出现的子文件夹。

common_files

在文件夹a和文件夹b都出现的文件。

common_funny

比較文件夹a和b不同的文件夹或文件。通过os.stat()比較。

same_files

比較文件夹a和b同样的文件夹或文件。

diff_files

比較文件夹a和b不同的文件夹或文件。通过文件内容比較。

funny_files

不进行比較的文件。

subdirs

子文件夹字典。

filecmp.DEFAULT_IGNORES

须要忽略的文件列表。

样例:

from filecmp import dircmp

def print_diff_files(dcmp):

for name in dcmp.diff_files:

print("diff_file %s found in %s and %s" % (name, dcmp.left,

dcmp.right))

for sub_dcmp in dcmp.subdirs.values():

print_diff_files(sub_dcmp)

dcmp = dircmp('dir1', 'dir2')

print_diff_files(dcmp)

在这个样例里,主要比較文件夹dir1和dir2,为此创建了dircmp对象dcmp,然后调用函数print_diff_files()。在这个函数里主要打印输出不同的文件,并递归到子文件夹里打印子文件夹里不同的文件输出。

蔡军生 QQ:9073204  深圳

8.5 filecmp--文件和文件夹比較处理的更多相关文章

  1. python文件和文件夹訪问File and Directory Access

    http://blog.csdn.net/pipisorry/article/details/47907589 os.path - Common pathname manipulations 都是和路 ...

  2. Java实现FTP文件与文件夹的上传和下载

    Java实现FTP文件与文件夹的上传和下载 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制 ...

  3. C# 拷贝指定文件夹下的所有文件及其文件夹到指定目录

    要拷贝的文件及其文件夹结构 其中.lab文件不能覆盖 /// <summary> /// 拷贝oldlab的文件到newlab下面 /// </summary> /// < ...

  4. 【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货

    关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...

  5. linux文件及文件夹权限

    以前上学的时候简单了解了下linux,现在对它的认识也只停留在一些小白命令上.以为我只要不是做服务器端开发的应该不会去碰吧,工作了才知道做开发的多少还是要熟悉一些linux的,至少你的项目会部署在li ...

  6. 软件工程 Coding.net代码托管平台 Git初学者的使用总结 五步完成 程序,文件,文件夹的Git

    一.前言 第一次用git相关的命令行,我使用的是Coding.net代码托管平台.Coding.net 自主打造的基于 Git 的代码托管平台,提供高性能的远端仓库,还有保护分支,历史版本分屏对比. ...

  7. Java 代码完成删除文件、文件夹操作

    import java.io.File;/** * 删除文件和目录 * */public class DeleteFileUtil {    /**     * 删除文件,可以是文件或文件夹     ...

  8. [No000073]C#直接删除指定目录下的所有文件及文件夹(保留目录)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. 教你一招:解决Win10 win7 删除文件或文件夹时提示“找不到该项目”

    问题很怪异,解决的办法却很简单. 首先,分析问题 使用不可显示ASCII字符或采用UNICODE字符方法创建的文件或文件夹: 名称中含有..等特殊符号文件或文件夹名称不符合Windows命名规范或建立 ...

随机推荐

  1. GoldenGate 传统抽取进程随 DataGuard 主备快速切换的方案(ADG 模式)

    环境描述: 1.节点描述 节点 IP 节点描述 11.6.76.221 GG 抽取端 / DG 节点,数据库版本号为 Oracle-11.2.0.3,与 11.6.76.222 组成 DataGuar ...

  2. Django----中间件详解

    Django中间件 在http请求 到达视图函数之前   和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 中间件的执行流程 1.执行完所有的request ...

  3. 通过正则表达式提取excel特定列中含有关键字的所有行数据

    在 Excel 中打开需要提取数据excel文件,使用 Alt+F11 快捷键打开 VBA 项目窗口,在左侧的工作表名称上点右键,选择查看代码,即可出现右侧的编辑代码窗口(如下图) 在代码窗口中输入以 ...

  4. React 和 Angular 各有什么优缺点,各自又适合什么开发场景?

    最近正在学习React,便谈一点自己的浅见. Angular.js首先Angular的背后是Google,所以社区基础是不用担心的,整个生态也已经是非常的完整了,从最基本的Tutorial到Stack ...

  5. C#连接六类数据库的代码集

    本文列出了C#连接Access.SQL Server.Oracle.MySQL.DB2和SyBase六种不同数据库的程序源码和需要注意的点. 1.C#连接Access 程序代码: ;

  6. HDnoip2017题解

    那么,作为一名初入信息竞赛的选手,我也试着开始用博客记录自己的学习历程,那么这篇文章先简单介绍一下我自己吧. 本人开始学习信息学大概以来,主要都是用的C++,所以对其他语言并不是十分熟悉.2016我还 ...

  7. STM32F4中USB与PC双向通信

    STM32F4系列处理器内部集成了USB-OTG控制器,在不要外部USB IC下就可以实现USB通信,最近两天看了下如何利用STM32的USB实现通信,记录下关键步骤: 1. 从http://www. ...

  8. Django 入门案例开发(中)

    昨天已经描述了如何搭建Django的开发环境,今天描述业务流程,具体我们要实现一个什么样的业务: 以下的业务都是假设的(网上书店   页面做的low): 1.用户注册及登录业务: 这是一个网上书店阅读 ...

  9. 深入浅出Java动态代理

    文章首发于[博客园-陈树义],点击跳转到原文深入浅出Java动态代理 代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中,更是有举足轻重的地位.代理 ...

  10. eclipse中hibernate和mybatis中xml配置文件的没有标签提醒解决方法

    当我们使用eclipse编写Mybatis或hibernate的xml文件时,面对众多标签的配置文件,却没有自动提醒,对于工作和学习都十分不方便. 之所以没有自动提醒,是因为dtd文件没有加载成功. ...