扔掉壓縮工具,讓我們用Python管理壓縮包钝腺,方便快捷

寫在之前

壓縮包是互聯(lián)網(wǎng)上軟件發(fā)布的標(biāo)準(zhǔn)格式抛姑,同時(shí)對(duì)于系統(tǒng)管理很有用處。當(dāng)我們需要將多份文件發(fā)送給別人的時(shí)候艳狐,最好通過壓縮包的形式發(fā)送定硝,還有在備份某些文件的時(shí)候,為了減少磁盤空間的占用毫目,也需要對(duì)備份的數(shù)據(jù)進(jìn)行壓縮蔬啡。

Python 中有一系列對(duì)壓縮包進(jìn)行處理的工具,包括創(chuàng)建壓縮包镀虐,解壓壓縮包以及獲取壓縮包中的文件列表等箱蟆,今天的文章,我們就來學(xué)習(xí)一下與壓縮包相關(guān)的 Python 標(biāo)準(zhǔn)庫刮便。

管理 zip 壓縮包

在大多數(shù)情況下空猜,我們在 Windows 下使用 zip 進(jìn)行壓縮,在 Linux 下使用 gzip 或者 bzip2 進(jìn)行壓縮恨旱。這一部分辈毯,我們來看一下如何管理 zip 格式的壓縮包。

1.讀取 zip

Python 管理 zip 主要使用 zipfile 模塊搜贤,這個(gè)模塊里有一個(gè)名為 ZipFile 的對(duì)象谆沃,我們通過將 zip 壓縮包的名稱傳遞給這個(gè)對(duì)象的函數(shù),這樣就打開了一個(gè) zip 壓縮包并獲得一個(gè) ZipFile 的對(duì)象入客,然后使用這個(gè)對(duì)象的方法去讀取 zip 壓縮包里的內(nèi)容管毙。具體如下所示:

扔掉壓縮工具,讓我們用Python管理壓縮包桌硫,方便快捷

namelist() 是 ZipFile 中的常用方法夭咬,初次以外還比較常用的方法有 extract,extractall:

  • namelist:返回一個(gè)列表铆隘,列表中是 zip 中包含的所有文件和文件夾卓舵;
  • extract:從 zip 中提取單個(gè)文件
  • extarctall:從 zip 文件中提取所有文件

2.創(chuàng)建 zip

與文件的方式類似,如果想要?jiǎng)?chuàng)建一個(gè) zip 格式的壓縮文件膀钠,必須要以「寫」的模式打開 zip 文件掏湾,需要說一點(diǎn)的是,ZipFile 的對(duì)象是通過 write 方法來添加文件的肿嘲。具體如下所示:

扔掉壓縮工具融击,讓我們用Python管理壓縮包,方便快捷

上面的代碼是創(chuàng)建了一個(gè)名為 test.zip 的新 zip 文件雳窟,它包含 test.py 壓縮后的內(nèi)容尊浪。

管理 tar 包

tar 命令一般是在 Linux 系統(tǒng)中創(chuàng)建壓縮包,并且可以指定壓縮包的壓縮算法封救。此外 tar 命令也可以創(chuàng)建一個(gè)不壓縮的 tar 包拇涤,僅僅是為了能把多個(gè)文件進(jìn)行打包便于傳輸。這也就是說誉结,我們在使用 tar 命令的時(shí)候鹅士,既可以創(chuàng)建普通的 tar 包,也可以創(chuàng)建使用壓縮算法壓縮過的壓縮包惩坑。

Python 中使用 tarfile 標(biāo)準(zhǔn)庫提供了 tar 命令提供的功能摩梧,我們也可以使用它創(chuàng)建一個(gè)壓縮或者一個(gè)非壓縮的 tar 包。我之前很多次說過 Python 的簡潔優(yōu)雅體現(xiàn)在方方面面丑瞧,在這里體現(xiàn)在 tarfile 模塊比 Linux 下的 tar 命令用起來更加舒服吟税。

1.讀取 tar 包

同樣讀取 tar 包和 Python 的文件管理操作類似,讀寫一個(gè)壓縮包稀轨,需要執(zhí)行打開操作扼脐,同時(shí)指定打開模式,并且在操作完成以后關(guān)閉文件奋刽,當(dāng)然在這里我們可以使用上下文管理器來保證文件的關(guān)閉邏輯瓦侮。具體如下所示:

扔掉壓縮工具,讓我們用Python管理壓縮包佣谐,方便快捷

上面的代碼中肚吏,導(dǎo)入 tarfile 庫,使用默認(rèn)的讀模式打開 tar 包狭魂,tarfile.open() 函數(shù)返回一個(gè) TarFile 對(duì)象罚攀,這個(gè)對(duì)象表示當(dāng)前打開的 tar 包党觅,我們可以通過這個(gè)對(duì)象的方法操作和讀取 tar 包中的內(nèi)容。

tarfile 中有不少函數(shù)斋泄,其中最常用的有 getnames杯瞻,extract,extractall 函數(shù):

  • getnames:獲取 tar 包中的文件列表炫掐;
  • extract:提取單個(gè)文件魁莉;
  • extractall:提取所有文件。

2.創(chuàng)建 tar 包

從上面的例子中可以看到募胃,讀一個(gè) tar 包與讀一個(gè)文件類似旗唁,都是以「讀」的方式打開文件并得到一個(gè)對(duì)象,然后通過這個(gè)對(duì)象的方法去操作文件痹束。同樣創(chuàng)建一個(gè) tar 包和寫一個(gè)文件也比較類似检疫。具體如下所示:

扔掉壓縮工具,讓我們用Python管理壓縮包祷嘶,方便快捷

上面的代碼中电谣,由于我們是創(chuàng)建一個(gè) tar 包,所以以「寫」模式打開 tar 包并得到一個(gè) TarFile 對(duì)象抹蚀,然后使用 TarFile 對(duì)象的 add 方法將 test.py 文件添加到 tar 包中剿牺。

3.tarfile 讀取和創(chuàng)建壓縮包

上面我們用 targfile 創(chuàng)建和讀取未壓縮的 tar 包,但是一般情況下环壤,我們創(chuàng)建 tar 包的時(shí)候都會(huì)使用壓縮算法進(jìn)行壓縮晒来,以加快傳輸速度和減少占用的磁盤空間。

使用 tarfile 創(chuàng)建和讀取壓縮包非常簡單郑现,只要在打開文件時(shí)指定壓縮算法即可湃崩。對(duì)于 tarfile 的 open 函數(shù),以「打開模式:壓縮算法」的形式打開即可接箫。具體如下所示:

a. 讀取一個(gè)用 gzip 算法壓縮的 tar 包:

扔掉壓縮工具攒读,讓我們用Python管理壓縮包,方便快捷

b. 創(chuàng)建一個(gè)用 bzip2 算法壓縮的 tar 包:

扔掉壓縮工具辛友,讓我們用Python管理壓縮包薄扁,方便快捷
扔掉壓縮工具,讓我們用Python管理壓縮包废累,方便快捷
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邓梅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子邑滨,更是在濱河造成了極大的恐慌日缨,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掖看,死亡現(xiàn)場離奇詭異匣距,居然都是意外死亡面哥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門毅待,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尚卫,“玉大人,你說我怎么就攤上這事恩静』篮粒” “怎么了蹲坷?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵驶乾,是天一觀的道長。 經(jīng)常有香客問我循签,道長级乐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任县匠,我火速辦了婚禮风科,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乞旦。我一直安慰自己贼穆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布兰粉。 她就那樣靜靜地躺著故痊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玖姑。 梳的紋絲不亂的頭發(fā)上愕秫,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音焰络,去河邊找鬼戴甩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闪彼,可吹牛的內(nèi)容都是我干的甜孤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼畏腕,長吁一口氣:“原來是場噩夢啊……” “哼课蔬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起郊尝,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤二跋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后流昏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扎即,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吞获,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谚鄙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片各拷。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闷营,靈堂內(nèi)的尸體忽然破棺而出烤黍,到底是詐尸還是另有隱情,我是刑警寧澤傻盟,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布速蕊,位于F島的核電站,受9級(jí)特大地震影響娘赴,放射性物質(zhì)發(fā)生泄漏规哲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一诽表、第九天 我趴在偏房一處隱蔽的房頂上張望唉锌。 院中可真熱鬧,春花似錦竿奏、人聲如沸袄简。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绿语。三九已至,卻和暖如春平痰,著一層夾襖步出監(jiān)牢的瞬間汞舱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工宗雇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昂芜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓赔蒲,卻偏偏與公主長得像泌神,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舞虱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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