Python基础学习:filecmp模块

资源代码:Lib/filecmp.py

 

    filecmp模块定义了用于文件和目录比较的函数,不同函数拥有不同的执行时间和判定策略。对于文件的比较,也可以参见difflib模块。

    filecmp模块定义了以下函数:

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

    比较文件f1和f2,如果他们等价,返回True。

    如果shallow为真,具备完全相同的os.stat()签名的文件被认为是等价的。否则,文件的内容将被比较。

    注意:该函数不会调用其它程序以实现快捷高效。

    该函数使用一个快速缓冲区缓冲过去的比较和比较结果,如果os.stat()中关于文件的信息被改变,缓冲区将完全失效。可以使用clear_cache()清除整个缓冲区。

 

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

    比较两个字典dir1和dir2中具备相同名称的文件。

    返回三个列表的文件名:匹配match、不匹配mismatch、错误errors。匹配及不匹配包含的文件顾名思义,而错误列出的文件都是不能比较的。如果文件不存在于某个列表中、用户没有文件读取权限以及因其他原因导致文件无法比较,该文件就会被列入错误errors列表中。

    shallow参数与filecmp.cmp()的意义相同。

    例如:cmpfiles(‘a’, ‘b’, [‘c’, ‘d/e’])将会比较a/c与b/c,b/d/e和a/d/e,’c’和’d/e’总会在三个结果列表中的某一个钟。

 

filecmp. clear_cache()

    清除filecmp高速缓冲区。如果一个文件在修改后的比较十分快速,甚至超过了底层文件系统的时间分辨率,该缓冲将会有大用。

 

1. dircmp

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

    构建一个新的目录比较对象,用于比较目录a和b。ignore为一个需要被忽略的名称的列表,默认为filecmp. DEFAULT_IGNORES。hide位一个需要隐藏的名称的列表,默认为[os. curdir, os.pardir]。

    dircmp类进行文件比较是利用执行如filecmp.cmp()函数中的shallow比较而进行的。

    dircmp类提供以下方法:

report()

    打印a与b之间的比较。利用sys.stdout。

 

report_partial_closure()

    打印a与b之间的比较,以及它们间共同的直接子目录。

 

report_full_closure

    打印a与b之间的比较结果,以及它们的共有子目录(严格的)。

 

   dircmp类提供了有趣的水星,这些属性可以被用于获取关于目录树比较的各种位信息。

    注意,经由__getattr__()hooks,所有属性被懒散的计算,因此如果只进行轻量化比较,该类不会有足够的速度。

 

left

    目录a。

 

right

    目录b。

 

left_list

    文件和子目录位于a,通过hide和ignore过滤。

 

right_list

    文件和子目录位于b,通过hide和ignore过滤。

 

common

    文件和子目录同时存在于a与b中。

 

left_only

    文件和子目录只在a中。

 

right_only

    文件和子目录只存在于b中。

 

common_files

    文件同时存在于a与b中。

 

common_funny

    names同时存在于a与b中,这样目录和names间的典型差异由os.stat()报错。

 

same_files

    文件在a与b中都进行了定义,使用类的文件比较操作。

 

diff_files

    文件同时存在于a与b中,内容的差异通过类的文件比较操作进行运算。

 

funny_files

    文件同时存在于a与b中,但是不可以被比较。

 

subdirs

    一个目录,将common_dirs中的names映射到dircmp对象中。

 

filecmp. DEFAULT_IGNORES

    默认下,通过dircmp忽略目录的列表。

 

    这有一个使用subdirs属性通过啷个木木去初始共有的有区别的文件,进行递归的搜索的简化例程:

>>> 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值