python的Gzip模块

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_36670529/article/details/100123552

Gzip模块为python的压缩和解压缩模块,读写gzip 文件

一、使用gzip模块压缩文件:

import gzip #导入python gzip模块,注意名字为全小写
g = gzip.GzipFile(filename="", mode="wb", compresslevel=9, fileobj=open('sitemap.log.gz', 'wb'))#filename参数是压缩文件内文件的名字,为空也可以。fileobj是生成的压缩文件对象
g.write(open('d:\\test\\sitemap.xml').read())
g.close()

二、使用gzip解压缩文件:

代码如下:

g = gzip.GzipFile(mode="rb", fileobj=open('d:\\test\\sitemap.log.gz', 'rb')) # python gzip 解压
open(r"d:\\haha.xml", "wb").write(g.read())

三、实际应用:

在实际应用中,例如在爬取网页的过程中,我们检查网页源代码的head头部信息发现,是结果gzip压缩处理的,所以在显示过程中显示不完全,例如:

我们要抓取指定url的源代码

#-*-coding:utf8 -*-
import urllib2
from lxml import etree


request = urllib2.Request('http://outofmemory.cn/')

response = urllib2.urlopen(request)

print data.text()

发现显示出的源代码是经过压缩的数据

此时我们需要对齐进行解压操作,最终代码入下:

#-*-coding:utf8 -*-
import urllib2
from lxml import etree
from StringIO import StringIO  #StringIO模块就是在内存中读写str
import gzip  #加压缩文件
request = urllib2.Request('http://outofmemory.cn/')
request.add_header('Accept-encoding', 'gzip') #添加头信息
response = urllib2.urlopen(request)
if response.info().get('Content-Encoding') == 'gzip':
    buf = StringIO( response.read()) #将读取的response信息作为stringIO方便后面作为文件写入
    f = gzip.GzipFile(fileobj=buf)  #解压缩response
    data = f.read()
print data

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Super 前端

Ajax在jQuery中应用--jQuery基础知识点(5)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

8120
来自专栏谓之小一

基于google protobuf的gRPC实现

Protobuf(Google Protocol Buffers)提供一种灵活、高效、自动化的机制,用于序列化结构数据。Protobuf仅需自定义一次所需要的数...

15720
来自专栏JiekeXu之路

Windows10系统盘清理实用攻略

随着SSD的流行,如今很多DIY组装电脑或者笔记本都会配备固态硬盘,但目前SSD容量比较小,多为120-240GB左右,很多朋友为了省钱,电脑只有一块固态硬盘。...

32120
来自专栏Super 前端

JSON

JSON(JavaScript Object Notation, JS对象标记)是一种数据格式,不是一种编程语言。JSON和JavaScript对象区别,就像“...

15020
来自专栏Super 前端

JavaScript对象

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

9230
来自专栏zhisheng

还在为怎么阅读 JDK 源码犯愁吗?

这篇文章主要讲述jdk本身的源码该如何阅读,关于各种框架的源码阅读我们后面再一起探讨。

9520
来自专栏Web技术布道师

PHP session反序列化漏洞总结

每个session标签对应着一个$_SESSION键-值类型数组,数组中的东西需要存储下来,首先需要序列化。 在php中session有三种序列化的方式,分别是...

14820
来自专栏编程坑太多

「走进k8s」Kubernetes1.15.1配置软知识yaml(16)

3.缩进时不允许使用Tab键,只允许使用空格。(可以通过编译器将tab键设置成2个空格或者4个空格)

19720
来自专栏暴走大数据

Spark Core源码精读计划12 | Spark序列化及压缩机制浅析

《Spark Core源码精读计划3 | SparkContext辅助属性及后初始化》

12540
来自专栏WebJ2EE

Spring入门:Resource

然而,用 Java 的 File、URL 访问这些底层资源的步骤过于繁琐。Spring 为资源访问提供了一个 Resource 接口,该接口提供了更强的资源访问...

13020

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励