首页 > 利用python中的gzip模块压缩和解压数据流和文件

利用python中的gzip模块压缩和解压数据流和文件

直接给出源码实现, 分为两种情况:

1.网络连接中的数据流的压缩和解压,或是打开的文件读取一部分

2.打开文件压缩或是解压

#!/usr/bin/env python
#encoding: utf-8
#filename: gzip_demo.py
#author: [email protected]
#date: 2015-06-30import gzip, binascii, os
from cStringIO import StringIOdef 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_datadef 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_dataout_data = gzip_compress(in_data)print binascii.hexlify(out_data)r_data = gzip_uncompress(out_data)print r_dataraw_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)


请自己修改输入和输出文件路径, 确保相应的文件存在, 取消相应的注释进行测试.

参考文献:

[1].https://docs.python.org/2/library/gzip.html   官网

[2].http://blog.csdn.net/jhonguy/article/details/7867348 

更多相关:

  • 学习计划 MyPlan11 主题:Python描述统计、简单统计图形 时间:8.5-8.11周内完成 参考资料:新书《谁说菜鸟不会数据分析python篇》 各位星友们,在这个星球里每个人都要逼迫自己学习未知的领域或知识点,每天进步一点点,积累的时间久了 ,菜鸟也能起飞。 完成情况: 在pandas中,使用describe函数进行描述统...

  • 利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信。 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用TCPServer和UDPServer。 TCPServer/UDPS...

  • 题目:序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树。 示例:  你可以将以下二叉树:     1    /   2   3      /     4   5 序列化为 "[1,2,3,null,null,4,5]" 解题: /*** Definition for a binary tree no...

  • sd.js  import $global from "./global"; import $g from "./sg"; import $ from "jquery"; import {Message, Loading} from "element-ui";//引入饿了么相关组件 import {Base64} from "js-...

  •     原生sd.js----------------------------------------------------------------  const API_ROOT_URL = "http://www.api.com";const $d= {_postList_url: API_ROOT_URL + "/api...

  • 练习:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式------------ info of Egon -----------Name  : EgonAge   : 22Sex   : maleJob   : Teacher ------------- end -----------------完成情况:in_name=inpu...

  •   语法 它通过{}和:来代替%。 “映射”示例 通过位置 In [1]: '{0},{1}'.format('kzc',18) Out[1]: 'kzc,18' In [2]: '{},{}'.format('kzc',18) Out[2]: 'kzc,18' In [3]: '{1},{0},{1}'.forma...

  • --------------------------------------------------------------------------------------- 本系列文章为《机器学习实战》学习笔记,内容整理自书本,网络以及自己的理解,如有错误欢迎指正。 源码在Python3.5上测试均通过,代码及数据 --> http...

  • 首先运行easy_install pymongo命令安装pymongo驱动。然后执行操作: 创建连接 1 In [1]: import pymongo 2 3 In [2]: connection = pymongo.Connection('localhost', 27017) 切换到数据库malware In [3]: db...

  • 代码: public class Person{public int ID { get; set; }public string Name { get; set; }public int Age { get; set; } }public class Dog{public int ID { get; set; }...

  • Python 如何处理server返回gzip压缩过的内容,代码如下: from StringIO import StringIOimport gziprequest = urllib2.Request('http://outofmemory.cn/') request.add_header('Accept-encoding', '...