Python模塊zipfile原理及使用方法詳解
zipfile是python里用來做zip格式編碼的壓縮和解壓縮的,由于是很常見的zip格式,所以這個(gè)模塊使用頻率也是比較高的
zipfile里有兩個(gè)非常重要的class, 分別是ZipFile和ZipInfo, 在絕大多數(shù)的情況下,我們只需要使用這兩個(gè)class就可以了。
ZipFile是主要的類,用來創(chuàng)建和讀取zip文件
ZipInfo是存儲(chǔ)的zip文件的每個(gè)文件的信息的。
比如要讀取一個(gè)zipfile,這里假設(shè)filename是一個(gè)文件的路徑:
import zipfile z = zipfile.ZipFile(filename, 'r') # 這里的第二個(gè)參數(shù)用r表示是讀取zip文件,w是創(chuàng)建一個(gè)zip文件 for f in z.namelist(): print f
上面的代碼是讀取一個(gè)zip壓縮包里所有文件的名字。z.namelist() 會(huì)返回壓縮包內(nèi)所有文件名的列表。
再看看下面一個(gè):
import zipfile z = zipfile.ZipFile(filename, 'r') for i in z.infolist(): print i.file_size, i.header_offset
這里使用了z.infolist(), 它返回的就是壓縮包內(nèi)所有文件的信息,就是一個(gè)ZipInfo的列表。一個(gè)ZopInfo對(duì)象中包含了壓縮包內(nèi)一個(gè)文件的信息,其中比較常用的是 filename, file_size, header_offset, 分別為文件名,文件大小,文件數(shù)據(jù)在壓縮包中的偏移。其實(shí)之前的z.namelist()就是讀取的ZopInfo中的filename,組成一個(gè) list返回的。
從壓縮包里解壓縮出一個(gè)文件的方法是使用ZipFile的read方法:
import zipfile z = zipfile.ZipFile(filename, 'r') print z.read(z.namelist()[0])
這樣就讀取出z.namelist()中的第一個(gè)文件,并且輸出到屏幕,當(dāng)然也可以把它存儲(chǔ)到文件。
下面是創(chuàng)建zip壓縮包的方法:
與讀取的方法其實(shí)很類似的:
import zipfile, os z = zipfile.ZipFile(filename, 'w') # 注意這里的第二個(gè)參數(shù)是w,這里的filename是壓縮包的名字 #假設(shè)要把一個(gè)叫testdir中的文件全部添加到壓縮包里(這里只添加一級(jí)子目錄中的文件): if os.path.isdir(testdir): for d in os.listdir(testdir): z.write(testdir+os.sep+d) # close() 是必須調(diào)用的! z.close()
上面的代碼非常的簡(jiǎn)單。
想想還有一個(gè)問題,如果我把一個(gè)test/111.txt 添加到壓縮包里之后我希望在包里它放到test22/111.txt怎么辦呢?
其實(shí)這個(gè)就是ZipFile的write方法中第二個(gè)參數(shù)的作用了。只需要這樣調(diào)用:z.write("test/111.txt", "test22/111.txt")
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python?OpenCV形態(tài)學(xué)運(yùn)算示例詳解
這篇文章主要為大家介紹了OpenCV中的幾個(gè)形態(tài)學(xué)運(yùn)算,例如:腐蝕&膨脹、開&閉運(yùn)算、梯度運(yùn)算、頂帽運(yùn)算黑帽運(yùn)算,感興趣的可以了解一下2022-04-04Python+wxPython實(shí)現(xiàn)文件內(nèi)容搜索工具
在本篇文章中,我們將介紹如何使用?wxPython?庫(kù)創(chuàng)建一個(gè)簡(jiǎn)單的文件搜索工具,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-08-08python腳本設(shè)置系統(tǒng)時(shí)間的兩種方法
這篇文章主要介紹了python腳本設(shè)置系統(tǒng)時(shí)間的兩種方法,其一是調(diào)用socket直接發(fā)送udp包到國(guó)家授時(shí)中心,其二是調(diào)用ntplib包,感興趣的小伙伴們可以參考一下2016-02-02python標(biāo)準(zhǔn)庫(kù)random模塊處理隨機(jī)數(shù)
這篇文章主要介紹了python標(biāo)準(zhǔn)庫(kù)random模塊處理隨機(jī)數(shù),random模塊實(shí)現(xiàn)了各種分布的偽隨機(jī)數(shù)生成器,具體介紹感興趣的小伙伴可以參考一下2022-09-09對(duì)Pytorch中nn.ModuleList 和 nn.Sequential詳解
今天小編就為大家分享一篇對(duì)Pytorch中nn.ModuleList 和 nn.Sequential詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08