無(wú)需壓縮軟件,用python幫你操作壓縮包
寫(xiě)在之前
壓縮包是互聯(lián)網(wǎng)上軟件發(fā)布的標(biāo)準(zhǔn)格式,同時(shí)對(duì)于系統(tǒng)管理很有用處。當(dāng)我們需要將多份文件發(fā)送給別人的時(shí)候,最好通過(guò)壓縮包的形式發(fā)送,還有在備份某些文件的時(shí)候,為了減少磁盤(pán)空間的占用,也需要對(duì)備份的數(shù)據(jù)進(jìn)行壓縮。
Python 中有一系列對(duì)壓縮包進(jìn)行處理的工具,包括創(chuàng)建壓縮包,解壓壓縮包以及獲取壓縮包中的文件列表等,今天的文章,我們就來(lái)學(xué)習(xí)一下與壓縮包相關(guān)的 Python 標(biāo)準(zhǔn)庫(kù)。
管理 zip 壓縮包
在大多數(shù)情況下,我們?cè)?Windows 下使用 zip 進(jìn)行壓縮,在 Linux 下使用 gzip 或者 bzip2 進(jìn)行壓縮。這一部分,我們來(lái)看一下如何管理 zip 格式的壓縮包。
1.讀取 zip
Python 管理 zip 主要使用 zipfile 模塊,這個(gè)模塊里有一個(gè)名為 ZipFile 的對(duì)象,我們通過(guò)將 zip 壓縮包的名稱(chēng)傳遞給這個(gè)對(duì)象的函數(shù),這樣就打開(kāi)了一個(gè) zip 壓縮包并獲得一個(gè) ZipFile 的對(duì)象,然后使用這個(gè)對(duì)象的方法去讀取 zip 壓縮包里的內(nèi)容。具體如下所示:
>>> import zipfile>>> first_zip = zipfile.ZipFile(’test.zip’)>>> first_zip.namelist()
namelist() 是 ZipFile 中的常用方法,初次以外還比較常用的方法有 extract,extractall:
namelist:返回一個(gè)列表,列表中是 zip 中包含的所有文件和文件夾; extract:從 zip 中提取單個(gè)文件 extarctall:從 zip 文件中提取所有文件2.創(chuàng)建 zip
與文件的方式類(lèi)似,如果想要?jiǎng)?chuàng)建一個(gè) zip 格式的壓縮文件,必須要以「寫(xiě)」的模式打開(kāi) zip 文件,需要說(shuō)一點(diǎn)的是,ZipFile 的對(duì)象是通過(guò) write 方法來(lái)添加文件的。具體如下所示:
>>> import zipfile>>> my_zip = zipfile.ZipFile(’test.zip’, ’w’)>>> my_zip.write(’test.py’)>>> my_zip.close()
上面的代碼是創(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)行打包便于傳輸。這也就是說(shuō),我們?cè)谑褂?tar 命令的時(shí)候,既可以創(chuàng)建普通的 tar 包,也可以創(chuàng)建使用壓縮算法壓縮過(guò)的壓縮包。
Python 中使用 tarfile 標(biāo)準(zhǔn)庫(kù)提供了 tar 命令提供的功能,我們也可以使用它創(chuàng)建一個(gè)壓縮或者一個(gè)非壓縮的 tar 包。我之前很多次說(shuō)過(guò) Python 的簡(jiǎn)潔優(yōu)雅體現(xiàn)在方方面面,在這里體現(xiàn)在 tarfile 模塊比 Linux 下的 tar 命令用起來(lái)更加舒服。
1.讀取 tar 包
同樣讀取 tar 包和 Python 的文件管理操作類(lèi)似,讀寫(xiě)一個(gè)壓縮包,需要執(zhí)行打開(kāi)操作,同時(shí)指定打開(kāi)模式,并且在操作完成以后關(guān)閉文件,當(dāng)然在這里我們可以使用上下文管理器來(lái)保證文件的關(guān)閉邏輯。具體如下所示:
>>> import tarfile>>> with tarfile.open(’etc.tar’) as t:... for member in t.getmembers():... print(member.name)
上面的代碼中,導(dǎo)入 tarfile 庫(kù),使用默認(rèn)的讀模式打開(kāi) tar 包,tarfile.open() 函數(shù)返回一個(gè) TarFile 對(duì)象,這個(gè)對(duì)象表示當(dāng)前打開(kāi)的 tar 包,我們可以通過(guò)這個(gè)對(duì)象的方法操作和讀取 tar 包中的內(nèi)容。
tarfile 中有不少函數(shù),其中最常用的有 getnames,extract,extractall 函數(shù):
getnames:獲取 tar 包中的文件列表; extract:提取單個(gè)文件; extractall:提取所有文件。2.創(chuàng)建 tar 包
從上面的例子中可以看到,讀一個(gè) tar 包與讀一個(gè)文件類(lèi)似,都是以「讀」的方式打開(kāi)文件并得到一個(gè)對(duì)象,然后通過(guò)這個(gè)對(duì)象的方法去操作文件。同樣創(chuàng)建一個(gè) tar 包和寫(xiě)一個(gè)文件也比較類(lèi)似。具體如下所示:
>>> import tarfile>>> with tarfile.open(’etc.tar’, mode=’w’) as f:... f.add(’test.py’)
上面的代碼中,由于我們是創(chuàng)建一個(gè) tar 包,所以以「寫(xiě)」模式打開(kāi) 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)行壓縮,以加快傳輸速度和減少占用的磁盤(pán)空間。
使用 tarfile 創(chuàng)建和讀取壓縮包非常簡(jiǎn)單,只要在打開(kāi)文件時(shí)指定壓縮算法即可。對(duì)于 tarfile 的 open 函數(shù),以「打開(kāi)模式:壓縮算法」的形式打開(kāi)即可。具體如下所示:
a. 讀取一個(gè)用 gzip 算法壓縮的 tar 包:
>>> import tarfile>>> with tarfile.open(’etc.tar’, mode=’r:gz’) as f:
b. 創(chuàng)建一個(gè)用 bzip2 算法壓縮的 tar 包:
>>> import tarfile>>> with tarfile.open(’etc.tar’, mode=’w:bz2’) as f:
以上就是無(wú)需壓縮軟件,用python幫你操作壓縮包的詳細(xì)內(nèi)容,更多關(guān)于python 壓縮包的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
