Chinaunix首页 | 论坛 | 博客

分类: Python/Ruby

2014-03-14 22:21:24

    bz2模块是为了读写bz2文件使用,以下例子创建了一个bz2文件

#!/usr/bin/env python
#--*--coding:utf8--*--

from bz2 import *

#产生一个.bz2的数据包
compressor = BZ2Compressor()
compressor.compress('test test test\n')
compressor.compress('done done done.')
file = open('test.bz2', 'w')
file.write(compressor.flush())
file.close()

#读取.bz2文件
de = BZ2Decompressor()
file = open('test.bz2', 'r')
print de.decompress(file.read())

#作为一个文件对象,读取.bz2压缩文件.  感觉解压缩的话,还是这个好一点.
file = BZ2File('test.bz2', 'r')
i=1
for line in file.readlines():
        print i, line,
        i += 1


gzip 模块也是提供压缩和解压缩的,代码如下:
#!/usr/bin/env python
#--*- coding:utf8 --*--

import gzip

gz = gzip.open('test.gz', 'wb')
gz.write('another line\n')
gz.close()

gz = gzip.open('test.gz')
print gz.read()
gz.close()

注意:不允许对一个压缩文件同时进行读和写,那么另一个问题是如何对压缩的文件内容进行更新,修改?
import gzip

gz = gzip.GzipFile('gzip_test.py.bak.gz', 'a')
gz.write('another line\n')
gz.close()
注意对'a'的理解,它表示在文件末尾写,不需要和'w'一起使用

fnmatch模块允许使用shell型的通配符对文件名进行匹配, 有* ? [] [!seq]
#! /usr/bin/env python
# -*- coding:utf8 -*-

import os
import fnmatch
def findall(topdir, pattern):
        for dirpath, dirnames, files in os.walk(topdir):           #这里的os.walk的三个返回值与其它版本的不一样.
                for name in files:
                        print name
                        if fnmatch.fnmatch(name, pattern):
                                yield os.path.join(dirpath, name)      #关于yield的理解可看下面的两个链接,貌似这里好似将想要输出的结果放到了一个容器中,作为它的返回值

for pyfile in findall('.', '*.py'):
        print pyfile


https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/


阅读(881) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~