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
