python的标准库中的模块,用于数据压缩与解压
压缩数据流
zlib.compress(string[,level])
参数:指定压缩字符串,指定压缩级别:1-9,与压缩速度成反比,就是说1压缩速度最快,但是压缩率低。9压缩速度最慢,但是压缩率高,返回压缩结果
解压数据流
zlib.decompress(string[,wbits[,bufsize]])
参数:指定解压字符串,wbits和bufsize分别用于设置系统缓冲区大小(window buffer)与输出缓冲区大小(output buffer)
# -*- coding: utf-8 -*-
'''
create on:2014-09-12 16:39:24
'''
import zlib
import urllib
# 下载百度首页HTML
fp = urllib.urlopen("http://www.sina.com")
str = fp.read()
fp.close()
print len(str)
# 压缩数据流
str1 = zlib.compress(str, zlib.Z_BEST_COMPRESSION)
print len(str1)
str2 = zlib.decompress(str1)
print len(str2)
对象压缩数据
zlib.compressobj([level])
解压对象数据
zlib.decomperssobj(string[,wbits[,bufsize]])
和上面主要的区别在于,如果要解压缩上百M的数据文件,上面的方法会一次性全部加入到内存,下面的则会一次读取一部分解压缩,知道结束
import zlib, sys
compressor = zlib.compress(1)
# 输入文件路径
filein = raw_input("plz input the filename:")
fileout = raw_input("plz input the comperssed filename:")
# 打开文件
fdin = open(filein, "r")
fdout = open(fileout, "wb")
# 读取文件并压缩,同时写入文件
while 1:
block = fdin.read(64)
if not block:
break
compressed = compressor.compress(block)
fdout.write(compressed)
remaining = compressor.flush()
fdout.write(remaining)
print "compressed: %s" % filein
fdin.close()
fdout.close()