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


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

一、使用gzip模塊壓縮文件:

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()

二、使用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM