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