Python打開zip文件

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

創(chuàng)建一個(gè)ZipFile對(duì)象甚纲,表示一個(gè)zip文件朦前。

? ??\bullet 參數(shù)file:文件的路徑或者類似文件對(duì)象

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

? ??\bullet 參數(shù)compression: ZIP_STORED(無壓縮),ZIP_DEFLATED(壓縮贩疙,需要zlib支持)

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

解壓ZIP文檔中的所有文件到指定目錄

下面示例演示了讀取一個(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()


讀取ZIP文檔內(nèi)某個(gè)文件

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


將文件生成ZIP文檔

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

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

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

? ??\star 參數(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()


獲取ZIP文檔中某個(gè)文件的信息

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

import zipfile

if __name__ == "__main__":

? ? zipInfo = zipFile.getinfo(ok.docx)

? ? print("filename:",zipInfo.filename)

? ? print("date_time:",zipInfo.date_time)

常用函數(shù)

ZipFile.close()

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

ZipFile.getinfo(name)

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

ZipFile.infolist()

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

ZipFile.namelist()

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

ZipFile.open(name,mode='r',pwd=None,*,force_zip64=False)

以二進(jìn)制文件類對(duì)象的形式訪一個(gè)歸檔成員。name可以是歸檔內(nèi)某個(gè)文件的名稱也可以是某個(gè)ZipInfo對(duì)象适篙。如果包含了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”則文件類對(duì)象(ZipExtFile)將只讀并且提供下列方法:read(),readline(),readlines(),seek(),tell(),__iter__(),__next__()。這些對(duì)象可獨(dú)立于ZipFile進(jìn)行操作硫痰。

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

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

ZipFile.extract(member,path=None,pwd=None)

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

注解:如果一個(gè)成員文件名為絕對(duì)路徑涧卵,則將去掉驅(qū)動(dòng)器/UNC共享點(diǎn)和前導(dǎo)的(反)斜杠,例如:?///foo/bar?在 Unix 上將變?yōu)?foo/bar腹尖,而?C:\foo\bar?在 Windows 上將變?yōu)?foo\bar柳恐。 并且一個(gè)成員文件名中的所有?".."?都將被移除,例如:?../../foo../../ba..r?將變?yōu)?foo../ba..r热幔。 在 Windows 上非法字符 (:,?<,?>,?|,?",??, and?*) 會(huì)被替換為下劃線 (_)


ZipFile.extractall(path=None,members=None,pwd=None)

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

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

ZipFile.printdir()

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

ZipFile.setpassword(pwd)

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

ZipFile.read(name,pwd=None)

返回歸檔中文件name的字節(jié)數(shù)據(jù)。name是歸檔中文件的名稱窗价,或是一個(gè)ZipInfo對(duì)象如庭。歸檔必須以讀取或追加方式打開。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)的壓縮模塊不可用也會(huì)引發(fā)錯(cuò)誤帝牡。

ZipFile.testzip()

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

ZipFile.write(filename, arcname=None, compress_type=None, compresslevel=None)

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

ZipFile.writestr(zinfo_or_arcname,?data,?compress_type=None,?compresslevel=None)

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

ZipFile.filename()

ZIP文件的名稱

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贬丛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子给涕,更是在濱河造成了極大的恐慌豺憔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件够庙,死亡現(xiàn)場(chǎng)離奇詭異恭应,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)耘眨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門昼榛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剔难,你說我怎么就攤上這事胆屿。” “怎么了偶宫?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵非迹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我纯趋,道長(zhǎng)憎兽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任吵冒,我火速辦了婚禮纯命,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桦锄。我一直安慰自己扎附,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布结耀。 她就那樣靜靜地躺著留夜,像睡著了一般匙铡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碍粥,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天鳖眼,我揣著相機(jī)與錄音,去河邊找鬼嚼摩。 笑死钦讳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枕面。 我是一名探鬼主播愿卒,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼潮秘!你這毒婦竟也來了琼开?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤枕荞,失蹤者是張志新(化名)和其女友劉穎柜候,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躏精,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渣刷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矗烛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辅柴。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖高诺,靈堂內(nèi)的尸體忽然破棺而出碌识,到底是詐尸還是另有隱情,我是刑警寧澤虱而,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布筏餐,位于F島的核電站,受9級(jí)特大地震影響牡拇,放射性物質(zhì)發(fā)生泄漏魁瞪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一惠呼、第九天 我趴在偏房一處隱蔽的房頂上張望导俘。 院中可真熱鬧,春花似錦剔蹋、人聲如沸旅薄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽少梁。三九已至洛口,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凯沪,已是汗流浹背第焰。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留妨马,地道東北人挺举。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像烘跺,于是被迫代替她去往敵國(guó)和親湘纵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 作用:提供了許多關(guān)于文件和文件集合的高級(jí)操作滤淳,特別提供了支持文件復(fù)制和刪除的功能瞻佛。對(duì)于單個(gè)文件的操作,請(qǐng)參閱 os...
    wsgdiv閱讀 505評(píng)論 0 0
  • 善工必先利其器 介紹 標(biāo)準(zhǔn)庫意味著由官方維護(hù)娇钱,會(huì)隨著語言的演變而演變;因而值得大下功夫绊困,好好琢磨文搂。 標(biāo)準(zhǔn)庫非常龐大...
    WrRanX閱讀 1,333評(píng)論 0 1
  • 一.shutil模塊介紹 shutil模塊提供了一系列對(duì)文件和文件集合的高階操作。 特別是提供了一些支持文件拷貝和...
    只是甲閱讀 1,953評(píng)論 0 0
  • > 系統(tǒng)內(nèi)置模塊就是按照python解釋器后秤朗,系統(tǒng)給提供的模塊 > > 在需要時(shí)可以導(dǎo)入后使用煤蹭,例如:json,r...
    lmonkey_01閱讀 343評(píng)論 0 0
  • 本次實(shí)驗(yàn)將帶領(lǐng)大家用Python的zipfile模塊實(shí)現(xiàn)Zip文件的暴力破解,涉及的知識(shí)點(diǎn)包括:zipfile作谭、a...
    山禾家的貓閱讀 1,014評(píng)論 0 0