阿小信大人的头像
Talk is cheap. Show me the code. Linus Torvalds

fnmatch&glob&filecmp&Ellipsis2014-09-02 05:18

fnmatch模块只执行文件名匹配。

>>> import fnmatch
>>> fnmatch.fnmatch("ashin.txt", "ashi.txt")
False
>>> fnmatch.fnmatch("ashin.txt", "ashin.txt")
True
>>> fnmatch.fnmatch("ashin.txt", "ashiN.txt")    #windows中为True,不区分大小写
False
>>> fnmatch.fnmatchcase("ashin.txt", "ashiN.txt")      #区分大小写
False
>>> fnmatch.fnmatchcase("ashin.txt", "*.txt")
True
>>> fnmatch.fnmatchcase("ashin.txt", "?shin.txt")
True
>>> fnmatch.fnmatchcase("ashin.txt", "[a-z]shin.txt")
True
>>> fnmatch.fnmatchcase("ashin.txt", "[0-9]shin.txt")
False
>>> fnmatch.fnmatchcase("ashin.txt", "[!0-9]shin.txt")
True
>>> fnmatch.fnmatchcase("ashin.txt", "[!a-z]shin.txt")
False
>>> 
>>> def findall(topdir, pattern):
...   import os
...   for path, files, dirs in os.walk(topdir): 
...     for name in files:
...       if fnmatch.fnmatch(name, pattern):
...         yield os.path.join(path, name)
... 
>>> for txtfile in findall(".", "*.txt"):
...   print txtfile
... 
>>>

os.walk(topdir)这个方法返回的是一个三元tupple(dirpath, dirnames, filenames), 其中第一个为起始路径, 第二个为起始路径下的文件夹, 第三个是起始路径下的文件.

glob模块返回一个目录中的全部文件

>>> import glob
>>> glob.glob("*.txt")  #返回一个列表
>>> glob.iglob("*.txt")  #返回一个迭代器,  (range & xrange)
<generator object iglob at 0xb773c1bc>

文件比较filecmp

>>> import filecmp
>>> filecmp.cmp("./test1.txt", "./test2.txt")     #比较两个文件内容
False
>>> filecmp.cmpfiles(".", "/home/ashin/workspace", ["test1.txt", "test2.txt"])                         #比较位于dir1和dir2中列表中文件的内容,返回元组(match, mismatch, error)
>>> filecmp.dircmp(".", "/home/ashin/workspace")  #创建目录比较对象
>>> d = filecmp.dircmp(".", "/home/ashin/workspace")
>>> d.report()                          #比较两个目录,输出报告
>>> d.report_partial_closure()           #比较两个目录及其共同的直接子目录
>>> d.report_full_closure()              #递归比较两个目录及其所有子目录
>>> d.left_list                          #列出dir1中所有的文件和子目录
>>> d.right_list                         #列出dir2中所有的文件和子目录
>>> d.common                             #列出两个目录中都能找到的文件
>>> d.left_only                          #仅列出dir1中找到的不同的文件和子目录
>>> d.right_only                         #仅列出dir2中找到的不同的文件和子目录
>>> d.common_dirs                        #列出两个目录共同的子目录
>>> d.common_files                       #列出两个目录共有的文件
>>> d.common_funny                       #列出两个目录中类型不同的文件,或者因为类型不同而无法通过os.stat()获得信息的文件
>>> d.same_files                         #列出两个目录中文件名和内容都相同的文件
>>> d.diff_files                         #列出两个目录中文件名相同但内容不同的文件
>>> d.funny_files                        #列出在dir1和dir2中都存在,但是因为某种原因无法比较的文件
>>> d.subdirs                            #将d.common_dirs中的文件名映射到其他dircmp对象的字典中

bz2压缩解压

import bz2
>>> f = bz2.BZ2File("./test.bz2", "w")  #返回类文件对象
>>> data = "ashin is test bz2 of Python"
>>> f.write(data)
>>> f.close()
>>>

>>> c = bz2.BZ2Compressor()             #创建用于顺序压缩数据块序列的压缩器对象,参数可设定1-9的压缩级别,默认为最高级别9
>>> cd = c.compress(data)               #向压缩器添加新数据,如果可能,返回一串压缩数据
>>> fd = c.flush()                      #返回compress后全部剩余数据的压缩字符串
>>> d = bz2.BZ2Decompressor()           #创建解压缩器对象,无参数
>>> dfd = d.decompress(fd)              #返回解压数据,需重复调用,直到遇到数据结束流标记为止(因为数据是成块处理。返回的字符串中可能包含全部信息也可能不包含)
>>> bzcs = bz2.compress(data)           #返回压缩数据,可设置压缩级别
>>> bzds = bz2.decompress(bzcs)         #返回解压数据

Ellipsis对象

class wanan(object):
    def __getitem__(self, index):
        print index

w = wanan()
w[0, ..., 5] #调用w.__getitem__((1, Ellipsis, 5))

Ellipsis没有任何属性,等价于True

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Python#  
分享到:
阅读[1684] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

网友46.*.*.140[火星]2020-05-31 11:50
网友46.*.*.135[火星]2020-05-31 11:49
网友46.*.*.150[火星]2020-05-31 11:33
网友46.*.*.136[火星]2020-05-31 11:33

发表评论