無(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 壓縮包的名稱傳遞給這個(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
與文件的方式類似,如果想要?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 的文件管理操作類似,讀寫(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è)文件類似,都是以「讀」的方式打開(kāi)文件并得到一個(gè)對(duì)象,然后通過(guò)這個(gè)對(duì)象的方法去操作文件。同樣創(chuàng)建一個(gè) tar 包和寫(xiě)一個(gè)文件也比較類似。具體如下所示:
>>> 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)注腳本之家其它相關(guān)文章!
相關(guān)文章
原來(lái)我一直安裝 Python 庫(kù)的姿勢(shì)都不對(duì)呀
平常我都是直接執(zhí)行 pip install 安裝的第三方庫(kù),很多教程也是這么介紹的,一直以來(lái)我都認(rèn)為這是標(biāo)準(zhǔn)的、正確的安裝 Python 第三方庫(kù)的姿勢(shì)。下面小編給大家分享一篇教程,一起看看吧2019-11-11
如何使用?profile?進(jìn)行python代碼性能分析
對(duì)代碼優(yōu)化的前提是需要了解性能瓶頸在什么地方,程序運(yùn)行的主要時(shí)間是消耗在哪里,對(duì)于比較復(fù)雜的代碼可以借助一些工具來(lái)定位,python?內(nèi)置了豐富的性能分析工具,本文介紹如何使用profile進(jìn)行python代碼性能分析,感興趣的朋友一起看看吧2024-12-12
詳解在Python中使用OpenCV進(jìn)行直線檢測(cè)
在圖像處理中,直線檢測(cè)是一種常見(jiàn)的算法,它通常獲取n個(gè)邊緣點(diǎn)的集合,并找到通過(guò)這些邊緣點(diǎn)的直線。本文將介紹如何在Python中利用OpenCV進(jìn)行直線檢測(cè),需要的可以參考一下2022-03-03
Python中g(shù)etservbyport和getservbyname函數(shù)的用法大全
在Python的網(wǎng)絡(luò)編程中,getservbyport()函數(shù)和getservbyname()函數(shù)是socket模塊中的兩個(gè)函數(shù),因此在使用這兩個(gè)函數(shù)時(shí),需要導(dǎo)入socket模塊,這篇文章主要介紹了Python中g(shù)etservbyport和getservbyname函數(shù)的用法,需要的朋友可以參考下2023-01-01
python判斷文件是否存在,不存在就創(chuàng)建一個(gè)的實(shí)例
今天小編就為大家分享一篇python判斷文件是否存在,不存在就創(chuàng)建一個(gè)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Python+Matplotlib實(shí)現(xiàn)繪制三維折線圖
立體圖視覺(jué)上層次分明色彩鮮艷,具有很強(qiáng)的視覺(jué)沖擊力,讓觀看的人駐景時(shí)間長(zhǎng),留下深刻的印象。今天我們就通過(guò)這篇文章來(lái)了解如何用python中的matplotlib庫(kù)繪制漂亮的三維折線圖吧2023-03-03

