Python模塊之Gzip壓縮與解壓模塊Gzip模塊

Gzip模塊爲python的壓縮和解壓縮模塊,讀寫gzip 文件python

1、使用gzip模塊壓縮文件:url

1 import gzip #導入python gzip模塊,注意名字爲全小寫
2 g = gzip.GzipFile(filename="", mode="wb", compresslevel=9, fileobj=open('sitemap.log.gz', 'wb'))#filename參數是壓縮文件內文件的名字,爲空也能夠。fileobj是生成的壓縮文件對象
3 g.write(open('d:\\test\\sitemap.xml').read())
4 g.close()

2、使用gzip解壓縮文件:spa

代碼以下:code

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

3、實際應用xml

在實際應用中,例如在爬取網頁的過程當中,咱們檢查網頁源代碼的head頭部信息發現,是結果gzip壓縮處理的,因此在顯示過程當中顯示不徹底,例如:對象

咱們要抓取指定url的源代碼blog

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


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

response = urllib2.urlopen(request)

print data.text()

發現顯示出的源代碼是通過壓縮的數據ip

此時咱們須要對齊進行解壓操做,最終代碼入下:內存

#-*-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
相關文章
相關標籤/搜索