真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python解壓縮函數(shù) python 解壓縮文件

python怎樣壓縮和解壓縮ZIP文件

使用 zipfile 模塊進(jìn)行 ZIP 壓縮和解壓縮

創(chuàng)新互聯(lián),專注為中小企業(yè)提供官網(wǎng)建設(shè)、營銷型網(wǎng)站制作、成都響應(yīng)式網(wǎng)站建設(shè)公司、展示型成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作等服務(wù),幫助中小企業(yè)通過網(wǎng)站體現(xiàn)價(jià)值、有效益。幫助企業(yè)快速建站、解決網(wǎng)站建設(shè)與網(wǎng)站營銷推廣問題。

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

python中的zipfile?

python中的zipfile模塊是用于解壓/壓縮zip文件的,壓縮a.txt為a.zip,從b.zip解壓出b.txt(假設(shè)它們都放在d:\,且b.zip中只有b.txt)示范代碼如下5行:

from os import chdir;

from zipfile import ZipFile;

chdir("d:/");

with Zipfile("d:/b.zip","r") as zipf:zipf.extractall();

with Zipfile("d:/a.zip","w") as zipf:zipf.write("d:/a.txt");

Python實(shí)現(xiàn)批量壓縮文件/文件夾——zipfile

zipfile是python里用來做zip格式編碼的壓縮和解壓縮的,由于是很常見的zip格式,所以這個(gè)模塊使用頻率也是比較高的,

在這里對zipfile的使用方法做一些記錄。即方便自己也方便別人。

Python zipfile模塊用來做zip格式編碼的壓縮和解壓縮的,要進(jìn)行相關(guān)操作,首先需要實(shí)例化一個(gè) ZipFile 對象。ZipFile 接受一個(gè)字符串格式壓縮包名稱作為它的必選參數(shù),第二個(gè)參數(shù)為可選參數(shù),表示打開模式,類似于文件操作,有r/w/a三種模式,分別代表讀、寫、添加,默認(rèn)為r,即讀模式。

zipfile里有兩個(gè)非常重要的class, 分別是ZipFile和ZipInfo, 在絕大多數(shù)的情況下,我們只需要使用這兩個(gè)class就可以了。ZipFile是主要的類,用來創(chuàng)建和讀取zip文件而ZipInfo是存儲的zip文件的每個(gè)文件的信息的。

ZipFile還提供了如下常用的方法和屬性:

獲取zip文檔內(nèi)指定文件的信息。返回一個(gè)zipfile.ZipInfo對象,它包括文件的詳細(xì)信息。

獲取zip文檔內(nèi)所有文件的信息,返回一個(gè)zipfile.ZipInfo的列表。

獲取zip文檔內(nèi)所有文件的名稱列表。

將zip文檔內(nèi)的指定文件解壓到當(dāng)前目錄。參數(shù)member指定要解壓的文件名稱或?qū)?yīng)的ZipInfo對象;參數(shù)path指定了解析文件保存的文件夾;

解壓zip文檔中的所有文件到當(dāng)前目錄。參數(shù)members的默認(rèn)值為zip文檔內(nèi)的所有文件名稱列表,也可以自己設(shè)置,選擇要解壓的文件名稱。

將zip文檔內(nèi)的信息打印到控制臺上。

設(shè)置zip文檔的密碼。

python怎樣壓縮和解壓縮ZIP文件(轉(zhuǎn))

榭梢越?姓庋?牟僮鰲2還? Python 中的 zipfile 模塊不能處理多卷的情況,不過這種情況并不多見,因此在通常情況下已經(jīng)足夠使用了。下面我只是對一些基本的 zipfile 操作進(jìn)行了記錄,足以應(yīng)付大部分的情況了。zipfile 模塊可以讓你打開或?qū)懭胍粋€(gè) zip 文件。比如:import zipfilez = zipfile.ZipFile('zipfilename', mode='r') 這樣就打開了一個(gè) zip 文件,如果mode為'w'或'a'則表示要寫入一個(gè) zip 文件。如果是寫入,則還可以跟上第三個(gè)參數(shù): compression=zipfile.ZIP_DEFLATED 或 compression=zipfile.ZIP_STORED ZIP_DEFLATED是壓縮標(biāo)志,如果使用它需要編譯了zlib模塊。而后一個(gè)只是用zip進(jìn)行打包,并不壓縮。在打開了zip文件之后就可以根據(jù)需要是讀出zip文件的內(nèi)容還是將內(nèi)容保存到 zip 文件中。讀出zip中的內(nèi)容很簡單,zipfile 對象提供了一個(gè)read(name)的方法。name為 zip文件中的一個(gè)文件入口,執(zhí)行完成之后,將返回讀出的內(nèi)容,你把它保存到想到的文件中即可。寫入zip文件有兩種方式,一種是直接寫入一個(gè)已經(jīng)存在的文件,另一種是寫入一個(gè)字符串。對 于第一種使用 zipfile 對象的 write(filename, arcname, compress_type),后兩個(gè)參數(shù)是可以忽略的。第一個(gè)參數(shù)是文件名,第二個(gè)參數(shù)是表示在 zip 文件中的名字,如果沒有給出,表示使用與filename一樣的名字。compress_type是壓縮標(biāo)志,它可以覆蓋創(chuàng)建 zipfile 時(shí)的參數(shù)。第二種是使用 zipfile 對象的 writestr(zinfo_or_arcname, bytes),第一個(gè)參數(shù)是zipinfo 對象或?qū)懙綁嚎s文件中的壓縮名,第二個(gè)參數(shù)是字符串。使用這個(gè)方法可以動(dòng)態(tài)的組織文件的內(nèi)容。類源碼為:[python] view plaincopy# coding:cp936 # Zfile.py # xxteach.com 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()

用python解壓圖片并打印代碼

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 對象有一個(gè) namelist()方法,返回 ZIP 文件中包含的所有文件和文件夾 的字符串的列表。這些字符串可以傳遞給 ZipFile 對象的 getinfo()方法,返回一個(gè)關(guān) 于特定文件的 ZipInfo 對象。ZipInfo 對象有自己的屬性,諸如表示字節(jié)數(shù)的 file_size 和 compress_size,它們分別表示原來文件大小和壓縮后文件大小。ZipFile 對象表示 整個(gè)歸檔文件,而 ZipInfo 對象則保存該歸檔文件中每個(gè)文件的有用信息。

從 ZIP 文件中解壓縮

ZipFile 對象的 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()方法的文件夾不存在,它會被創(chuàng)建。例如,如果你用 exampleZip.extractall('C:\ delicious')取代?處的調(diào)用,代碼就會從 example.zip 中解壓 縮文件,放到新創(chuàng)建的 C:\delicious 文件夾中。

ZipFile 對象的 extract()方法從 ZIP 文件中解壓縮單個(gè)文件。

創(chuàng)建和添加到 ZIP 文件

要?jiǎng)?chuàng)建你自己的壓縮 ZIP 文件,必須以“寫模式”打開 ZipFile 對象,即傳入'w' 作為第二個(gè)參數(shù)(這類似于向 open()函數(shù)傳入'w',以寫模式打開一個(gè)文本文件)。

如果向 ZipFile 對象的 write()方法傳入一個(gè)路徑,Python 就會壓縮該路徑所指 的文件,將它加到 ZIP 文件中。write()方法的第一個(gè)參數(shù)是一個(gè)字符串,代表要添 加的文件名。第二個(gè)參數(shù)是“壓縮類型”參數(shù),它告訴計(jì)算機(jī)使用怎樣的算法來壓 縮文件。可以總是將這個(gè)值設(shè)置為 zipfile.ZIP_DEFLATED(這指定了 deflate 壓縮 算法,它對各種類型的數(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 文件。

Python打開zip文件

Zip文件格式是通用的文檔壓縮標(biāo)準(zhǔn)。自1.6版本起,Python中zipfile模塊能夠直接處理zip文件里的數(shù)據(jù),例如需要將對應(yīng)目錄或多個(gè)文件打包或壓縮成zip格式,或者需要查看一個(gè)zip格式的歸檔文件中部分或者所有文件同時(shí)避免講這些文件展開到磁盤上。使用ZipFile類來操作zip文件。

創(chuàng)建一個(gè)ZipFile對象,表示一個(gè)zip文件。

參數(shù)file:文件的路徑或者類似文件對象

參數(shù)mode:讀"r",寫入"w",添加"a"

參數(shù)compression: ZIP_STORED(無壓縮),ZIP_DEFLATED(壓縮,需要zlib支持)

參數(shù)allowZip64:默認(rèn)情況下報(bào)錯(cuò),將其設(shè)為True,ZipFile將用ZIP64擴(kuò)展進(jìn)行創(chuàng)建文件。

下面示例演示了讀取一個(gè)zip文檔,將文檔里所有文件解壓到名為"work"的文件里。

import zipfile

if __name__ == "__main__":

zFile = zipfile.ZipFile("F:\\txt.zip","r")

#ZipFile.namelist():獲取ZIP文檔內(nèi)所有文件的名稱列表

for fileM in zFile.namelist():

? ? zFile.extract(fileM,"F:\\work")

? ? zFile.close()

read(self,name,pwd=None)獲取ZIP文檔內(nèi)文件的二進(jìn)制數(shù)據(jù)

下面例子演示了使用read方法獲取ZIP文檔中mango.txt文件的數(shù)據(jù),并寫到copy.txt文件中

import zipfile?

if __name__ == "__main__":

zipFile = zipfile.ZipFile('F:\\test.zip','r')

data = zipFile.read("mango.txt")

(lambda f,d:(f.write(d),f.close()))(open("F:\\copy.txt,'w"),data)

zipFile.close()

write(self, filename, arcname=None, compress_type=None)將指定文件寫入ZIP文檔中

參數(shù)filename:需要寫入文件的路徑

參數(shù)arcname:文件寫入ZIP文檔后保存的文件名

參數(shù)compress_type:壓縮方法(ZIP_STORED或ZIP_DEFAULED)

下面離子演示了創(chuàng)建一個(gè)zip文檔,將test.docx文件寫入壓縮文檔里面。

import zipfile

if __name__ == "__main__":

zipFile = zipfile.ZipFile("F:\\test.zip","w")

zipFile.write("F:\\test.docx","ok.docx",zipfile.ZIP_DEFLATED)

zipFile.close()

getinfo(name)返回一個(gè)ZipInfo類的對象。

import zipfile

if __name__ == "__main__":

zipInfo = zipFile.getinfo(ok.docx)

print("filename:",zipInfo.filename)

print("date_time:",zipInfo.date_time)

常用函數(shù)

關(guān)閉歸檔文件,你必須在退出程序之前調(diào)用close()否則將不會寫入關(guān)鍵記錄數(shù)據(jù)。

返回一個(gè)ZipInfo對象,其中包含有關(guān)歸檔成員name的信息。針對一個(gè)目前并不包含于歸檔中的名稱調(diào)用getinfo()將會引發(fā)KeyError。

返回一個(gè)列表,其中包含每個(gè)歸檔成員的ZipInfo對象。如果是打開一個(gè)現(xiàn)有歸檔則這些對象的排列順序與他們對于條目在磁盤上的實(shí)際ZIP文件中的順序一致。

返回按名稱排列的歸檔成員列表。

以二進(jìn)制文件類對象的形式訪一個(gè)歸檔成員。name可以是歸檔內(nèi)某個(gè)文件的名稱也可以是某個(gè)ZipInfo對象。如果包含了mode形參,則它必須為"r"(默認(rèn)值)或"w"。pwd為用于解密已加密Zip文件的密碼。

open()也是一個(gè)上下文 管理器,因此支持with語句:

with ZipFile('spam.zip') as myzip:

with myzip.open('eggs.txt') as myfile:

print(myfile.read())

如果mode為“r”則文件類對象(ZipExtFile)將只讀并且提供下列方法:read(),readline(),readlines(),seek(),tell(),__iter__(),__next__()。這些對象可獨(dú)立于ZipFile進(jìn)行操作。

如果mode='w'則返回一個(gè)可寫入的文件句柄,它將支持write()方法。當(dāng)一個(gè)可寫入的文件句柄被打開時(shí),嘗試讀寫ZIP文件中的其他文件將會引發(fā)ValueError。

當(dāng)寫入一個(gè)文件時(shí),如果文件大小不能預(yù)先確定但是可能超過2GiB,可傳入force_zip64=True以確保標(biāo)頭格式能夠支持超大文件。如果文件大小可以預(yù)先確定,則在構(gòu)造ZipInfo對象時(shí)應(yīng)設(shè)置file_size,并將其作name形參。

從歸檔中提取一個(gè)成員放入當(dāng)前工作目錄;member必須為成員的完整名稱或ZipInfo對象。成員的文件信息會盡可能精確地被提取。path指定一個(gè)要提取到的不同目錄。member可以是一個(gè)文件名或ZipInfo對象。pwd是用于解密文件的密碼。返回所創(chuàng)建的經(jīng)正規(guī)化的路徑(對應(yīng)于目錄或新文件)。

從歸檔中提取出所有成員放入當(dāng)前工作目錄。path指定一個(gè)要提取到的不同的目錄。members為可選項(xiàng)且必須為namelist()所返回列表的一個(gè)子集。pwd是用于解密文件的密碼。

警告:絕不要未經(jīng)預(yù)先檢驗(yàn)就從不可靠的源中提取歸檔文件。 這樣有可能在? path ?之外創(chuàng)建文件,例如某些成員具有以?"/"?開始的文件名或帶有兩個(gè)點(diǎn)號?".."?的文件名。 此模塊會嘗試防止這種情況。 參見? extract() ?的注釋。

將歸檔是目錄表打印到sys.stdout.

設(shè)置pwd為用于提取已加密文件的默認(rèn)密碼。

返回歸檔中文件name的字節(jié)數(shù)據(jù)。name是歸檔中文件的名稱,或是一個(gè)ZipInfo對象。歸檔必須以讀取或追加方式打開。pwd為用于已加密文件的密碼,并且如果指定該參數(shù)則它將覆蓋通過setpassword()設(shè)置的默認(rèn)密碼。 on a ZipFile that uses a compression method 在使用? ZIP_STORED ?,? ZIP_DEFLATED ,? ZIP_BZIP2 ?或? ZIP_LZMA ?以外的壓縮方法的 ZipFile 上調(diào)用? read() ?將引發(fā)? NotImplementedError 。 如果相應(yīng)的壓縮模塊不可用也會引發(fā)錯(cuò)誤。

讀取歸檔中的所有文件并檢查他們的CRC和文件頭。返回第一個(gè)已損壞文件的名稱,在其他情況下則返回None。

將名為filename的文件寫入歸檔,給予的歸檔名為arcname(默認(rèn)情況下將與filename一致,但是不帶驅(qū)動(dòng)器盤符并會移除開頭的路徑分隔符)。compress_type如果給出,它將覆蓋作為構(gòu)造器compression形參對于新條目所給出的值。類似地,compresslevel如果給出也將覆蓋構(gòu)造器。歸檔必須使用"w","x“或"a"模式打開。

將一個(gè)文件寫入歸檔。 內(nèi)容為? data ,它可以是一個(gè)? str ?或? bytes ?的實(shí)例;如果是? str ,則會先使用 UTF-8 進(jìn)行編碼。? zinfo_or_arcname ?可以是它在歸檔中將被給予的名稱,或者是? ZipInfo ?的實(shí)例。 如果它是一個(gè)實(shí)例,則至少必須給定文件名、日期和時(shí)間。 如果它是一個(gè)名稱,則日期和時(shí)間會被設(shè)為當(dāng)前日期和時(shí)間。 歸檔必須以?'w',?'x'?或?'a'?模式打開。

ZIP文件的名稱


本文標(biāo)題:python解壓縮函數(shù) python 解壓縮文件
轉(zhuǎn)載來于:http://weahome.cn/article/hihdce.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部