直接给出源码实现, 分为两种情况:
1.网络连接中的数据流的压缩和解压,或是打开的文件读取一部分
2.打开文件压缩或是解压
#!/usr/bin/env python #encoding: utf-8 #filename: gzip_demo.py #author: tao_627@aliyun.com #date: 2015-06-30 import gzip, binascii, os from cStringIO import StringIO def gzip_compress(raw_data): buf = StringIO() f = gzip.GzipFile(mode='wb', fileobj=buf) try: f.write(raw_data) finally: f.close() return buf.getvalue() def gzip_uncompress(c_data): buf = StringIO(c_data) f = gzip.GzipFile(mode = 'rb', fileobj = buf) try: r_data = f.read() finally: f.close() return r_data def compress_file(fn_in, fn_out): f_in = open(fn_in, 'rb') f_out = gzip.open(fn_out, 'wb') f_out.writelines(f_in) f_out.close() f_in.close() def uncompress_file(fn_in, fn_out): f_in = gzip.open(fn_in, 'rb') f_out = open(fn_out, 'wb') file_content = f_in.read() f_out.write(file_content) f_out.close() f_in.close() if __name__ == '__main__': in_data = 'hello, world!' print in_data out_data = gzip_compress(in_data) print binascii.hexlify(out_data) r_data = gzip_uncompress(out_data) print r_data raw_f = '/opt/log/raw/access.log_HLJYD-ICS-68_20150609040506.old' #raw_f = '/home/taoyx/program_develop/python_dev/a.html'; gzip_f2 = '/opt/log/raw/access.log_HLJYD-ICS-68_20150609040506.gz' #gzip_f2 = '/home/taoyx/program_develop/python_dev/log_gz/cpm.access.log-20150225.gz' #gzip_f2 = '/home/taoyx/program_develop/python_dev/a.html.1.gz' compress_file(raw_f, gzip_f2) #gunzip_f = '/home/taoyx/program_develop/python_dev/log_gz/cpm.access.log-20150225.old' #gunzip_f = '/home/taoyx/program_develop/python_dev/a.html.1' #uncompress_file(gzip_f2, gunzip_f)
请自己修改输入和输出文件路径, 确保相应的文件存在, 取消相应的注释进行测试.
参考文献: