import StringIO
公司主營(yíng)業(yè)務(wù):做網(wǎng)站、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出連云免費(fèi)做網(wǎng)站回饋大家。
import gzip
compresseddata = gzip方式壓縮的字符串(html)
compressedstream = StringIO.StringIO(compresseddata)
gzipper = gzip.GzipFile(fileobj=compressedstream)
data = gzipper.read() # data就是解壓后的數(shù)據(jù)
一個(gè)簡(jiǎn)單的例子
1 import urllib2
2 from StringIO import StringIO
3 import gzip
4
5 def loadData(url):
6 request = urllib2.Request(url)
7 request.add_header('Accept-encoding', 'gzip')
8 response = urllib2.urlopen(request)
9 if response.info().get('Content-Encoding') == 'gzip':
10 print 'gzip enabled'
11 buf = StringIO(response.read())
12 f = gzip.GzipFile(fileobj=buf)
13 data = f.read()
14 else:
15 data = response.read()
16 return data
import zipfile
# 傳入壓縮文件zfile.zip獲取相關(guān)信息
zip_file = zipfile.ZipFile('zfile.zip')
# 獲取壓縮文件中的內(nèi)容
f_content = zip_file.namelist()
# 壓縮前的大小
f_size = zip_file.getinfo('zfile/a.txt').file_size
# 壓縮后的大小
c_size = zip_file.getinfo('zfile/a.txt').compress_size
ZipFile 對(duì)象有一個(gè) namelist()方法,返回 ZIP 文件中包含的所有文件和文件夾 的字符串的列表。這些字符串可以傳遞給 ZipFile 對(duì)象的 getinfo()方法,返回一個(gè)關(guān) 于特定文件的 ZipInfo 對(duì)象。ZipInfo 對(duì)象有自己的屬性,諸如表示字節(jié)數(shù)的 file_size 和 compress_size,它們分別表示原來文件大小和壓縮后文件大小。ZipFile 對(duì)象表示 整個(gè)歸檔文件,而 ZipInfo 對(duì)象則保存該歸檔文件中每個(gè)文件的有用信息。
從 ZIP 文件中解壓縮
ZipFile 對(duì)象的 extractall()方法從 ZIP 文件中解壓縮所有文件和文件夾,放到當(dāng) 前工作目錄中。
import zipfile
zip_file = zipfile.ZipFile('zfile.zip')
# 解壓
zip_extract = zip_file.extractall()
zip_extract.close()
運(yùn)行這段代碼后, example.zip 的內(nèi)容將被解壓縮到 C:\。 或者, 你可以向 extractall()傳遞的一個(gè)文件夾名稱,它將文件解壓縮到那個(gè)文件夾,而不是當(dāng)前工作 目錄。如果傳遞給 extractall()方法的文件夾不存在,它會(huì)被創(chuàng)建。例如,如果你用 exampleZip.extractall('C:\ delicious')取代?處的調(diào)用,代碼就會(huì)從 example.zip 中解壓 縮文件,放到新創(chuàng)建的 C:\delicious 文件夾中。
ZipFile 對(duì)象的 extract()方法從 ZIP 文件中解壓縮單個(gè)文件。
創(chuàng)建和添加到 ZIP 文件
要?jiǎng)?chuàng)建你自己的壓縮 ZIP 文件,必須以“寫模式”打開 ZipFile 對(duì)象,即傳入'w' 作為第二個(gè)參數(shù)(這類似于向 open()函數(shù)傳入'w',以寫模式打開一個(gè)文本文件)。
如果向 ZipFile 對(duì)象的 write()方法傳入一個(gè)路徑,Python 就會(huì)壓縮該路徑所指 的文件,將它加到 ZIP 文件中。write()方法的第一個(gè)參數(shù)是一個(gè)字符串,代表要添 加的文件名。第二個(gè)參數(shù)是“壓縮類型”參數(shù),它告訴計(jì)算機(jī)使用怎樣的算法來壓 縮文件。可以總是將這個(gè)值設(shè)置為 zipfile.ZIP_DEFLATED(這指定了 deflate 壓縮 算法,它對(duì)各種類型的數(shù)據(jù)都很有效)。
import zipfile
zip_file = zipfile.ZipFile('new.zip','w')
# 把zfile整個(gè)目錄下所有內(nèi)容,壓縮為new.zip文件
zip_file.write('zfile',compress_type=zipfile.ZIP_DEFLATED)
# 把c.txt文件壓縮成一個(gè)壓縮文件
# zip_file.write('c.txt',compress_type=zipfile.ZIP_DEFLATED)
zip_file.close()
這段代碼將創(chuàng)建一個(gè)新的 ZIP 文件,名為 new.zip,它包含 spam.txt 壓縮后的內(nèi)容。
要記住,就像寫入文件一樣,寫模式將擦除 ZIP 文件中所有原有的內(nèi)容。如果 只是希望將文件添加到原有的 ZIP 文件中,就要向 zipfile.ZipFile()傳入'a'作為第二 個(gè)參數(shù),以追加模式打開 ZIP 文件。
使用 zipfile 模塊進(jìn)行 ZIP 壓縮和解壓縮
import?zipfile???
import?os.path???
import?os???
class?ZFile(object):???
def?__init__(self,?filename,?mode='r',?basedir=''):???
self.filename?=?filename???
self.mode?=?mode???
if?self.mode?in?('w',?'a'):???
self.zfile?=?zipfile.ZipFile(filename,?self.mode,?compression=zipfile.ZIP_DEFLATED)???
else:???
self.zfile?=?zipfile.ZipFile(filename,?self.mode)???
self.basedir?=?basedir???
if?not?self.basedir:???
self.basedir?=?os.path.dirname(filename)???
def?addfile(self,?path,?arcname=None):???
path?=?path.replace('//',?'/')???
if?not?arcname:???
if?path.startswith(self.basedir):???
arcname?=?path[len(self.basedir):]???
else:???
arcname?=?''???
self.zfile.write(path,?arcname)???
def?addfiles(self,?paths):???
for?path?in?paths:???
if?isinstance(path,?tuple):???
self.addfile(*path)???
else:???
self.addfile(path)???
def?close(self):???
self.zfile.close()???
def?extract_to(self,?path):???
for?p?in?self.zfile.namelist():???
self.extract(p,?path)???
def?extract(self,?filename,?path):???
if?not?filename.endswith('/'):???
f?=?os.path.join(path,?filename)???
dir?=?os.path.dirname(f)???
if?not?os.path.exists(dir):???
os.makedirs(dir)???
file(f,?'wb').write(self.zfile.read(filename))???
def?create(zfile,?files):???
z?=?ZFile(zfile,?'w')???
z.addfiles(files)???
z.close()???
def?extract(zfile,?path):???
z?=?ZFile(zfile)???
z.extract_to(path)???
z.close()
解壓縮
import?zipfile??
import?os
def?un_zip(file_name):??
"""unzip?zip?file"""??
zip_file?=?zipfile.ZipFile(file_name)??
if?os.path.isdir(file_name?+?"_files"):??
pass??
else:??
os.mkdir(file_name?+?"_files")??
for?names?in?zip_file.namelist():??
zip_file.extract(names,file_name?+?"_files/")??
zip_file.close()
打包
zipfile.ZipFile('xxx.zip','a/w/x').write('xxx.txt')
'w'以截?cái)嗖懭胄挛募?a'以附加到現(xiàn)有文件,或'x'以專門創(chuàng)建和寫入新文件。
當(dāng)前文章:python3解壓縮函數(shù) python3 zip函數(shù)
轉(zhuǎn)載來源:http://m.rwnh.cn/article28/doocijp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)站營(yíng)銷、面包屑導(dǎo)航、網(wǎng)站設(shè)計(jì)公司、網(wǎng)頁設(shè)計(jì)公司、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)