python用 zipfile 模組壓縮檔案

2021-08-25 05:22:02 字數 3263 閱讀 1226

你可能熟悉 zip 檔案(帶有.zip 副檔名),它可以包含許多其他檔案的壓縮內容。壓縮乙個檔案會減少它的大小,這在網際網路上傳輸時很有用。因為乙個 zip 檔案可以包含多個檔案和子資料夾,所以它是一種很方便的方式,將多個檔案打包成乙個檔案。這個檔案叫做「歸檔檔案」,然後可以用作電子郵件的附件,或其他用途。利用 zipfile 模組中的函式,python 程式可以建立和開啟(或解壓)zip 檔案。假定你有乙個名為 example.zip 的 zip 檔案,它的內容如圖 9-2 所示。

讀取 zip 檔案

要讀取 zip 檔案的內容,首先必須建立乙個 zipfile 物件(請注意大寫首字母 z和 f)。zipfile 物件在概念上與 file 物件相似,你在第 8 章中曾經看到 open()函式返回 file 物件:它們是一些值,程式通過它們與檔案打交道。要建立乙個 zipfile物件,就呼叫 zipfile.zipfile()函式,向它傳入乙個字串,表示.zip 檔案的檔名。請注意,zipfile 是 python 模組的名稱,zipfile()是函式的名稱。例如,在互動式環境中輸入以下**:

zipfile 物件有乙個 namelist()方法,返回 zip 檔案中包含的所有檔案和資料夾的字串的列表。這些字串可以傳遞給 zipfile 物件的 getinfo()方法,返回乙個關於特定檔案的 zipinfo 物件。zipinfo 物件有自己的屬性,諸如表示位元組數的 file_size和 compress_size,它們分別表示原來檔案大小和壓縮後檔案大小。zipfile 物件表示整個歸檔檔案,而 zipinfo 物件則儲存該歸檔檔案中每個檔案的有用資訊。[1]處的命令計算出 example.zip 壓縮的效率,用壓縮後檔案的大小除以原來檔案的大小,並以%s 字串格式列印出這一資訊。

從 zip 檔案中解壓縮

zipfile 物件的 extractall()方法從 zip 檔案中解壓縮所有檔案和資料夾,放到當前工作目錄中。

>>> import zipfile, os

>>> os.chdir('c:\\') # move to the folder with example.zip

>>> examplezip = zipfile.zipfile('example.zip')

[1] >>> examplezip.extractall()

>>> examplezip.close()

執行這段**後,example.zip 的內容將被解壓縮到 c:\。或者,你可以向extractall()傳遞的乙個資料夾名稱,它將檔案解壓縮到那個資料夾,而不是當前工作目錄。如果傳遞給 extractall()方法的資料夾不存在,它會被建立。例如,如果你用examplezip.extractall('c:\\ delicious')取代[1]處的呼叫,**就會從 example.zip 中解壓縮檔案,放到新建立的 c:\delicious 資料夾中。zipfile 物件的 extract()方法從 zip 檔案中解壓縮單個檔案。繼續互動式環境中的例子:

>>> examplezip.extract('spam.txt')

'c:\\spam.txt'

>>> examplezip.extract('spam.txt', 'c:\\some\\new\\folders')

'c:\\some\\new\\folders\\spam.txt'

>>> examplezip.close()

傳遞給 extract()的字串,必須匹配 namelist()返回的字串列表中的乙個。或者,你可以向 extract()傳遞第二個引數,將檔案解壓縮到指定的資料夾,而不是當前工作目錄。如果第二個引數指定的資料夾不存在,python 就會建立它。extract()的返回值是被壓縮後檔案的絕對路徑。

建立和新增到 zip 檔案

要建立你自己的壓縮 zip 檔案,必須以「寫模式」開啟 zipfile 物件,即傳入'w'作為第二個引數(這類似於向 open()函式傳入'w',以寫模式開啟乙個文字檔案)。如果向 zipfile 物件的 write()方法傳入乙個路徑,python 就會壓縮該路徑所指的檔案,將它加到 zip 檔案中。write()方法的第乙個引數是乙個字串,代表要新增的檔名。第二個引數是「壓縮型別」引數,它告訴計算機使用怎樣的演算法來壓縮檔案。可以總是將這個值設定為 zipfile.zip_deflated(這指定了 deflate 壓縮演算法,它對各種型別的資料都很有效)。在互動式環境中輸入以下**:

>>> import zipfile

>>> newzip = zipfile.zipfile('new.zip', 'w')

>>> newzip.write('spam.txt', compress_type=zipfile.zip_deflated)

>>> newzip.close()

這段**將建立乙個新的 zip 檔案,名為new.zip,它包含spam.txt 壓縮後的內容。要記住,就像寫入檔案一樣,寫模式將擦除 zip 檔案中所有原有的內容。如果只是希望將檔案新增到原有的 zip 檔案中,就要向 zipfile.zipfile()傳入'a'作為第二個引數,以新增模式開啟 zip 檔案。

python標準庫學習之zipfile模組

zipfile模組裡有兩個非常重要的class,分別是zipfile和zipinfo。zipfile是主要的類,用來建立和讀取zip檔案,而zipinfo是儲存的zip檔案的每個檔案的資訊的。class zipfile.zipfile file mode compression allowzip64...

Python基礎 ZipFile模組

zipfile和zipinfo,在絕大多數的情況下,我們只需要使用這兩個class就可以了。zipfile是主要的類,用來建立和讀取zip檔案。而zipinfo是儲存的zip檔案的每個檔案的資訊的。import zipfile z zipfile.zipfile filename,r for i i...

python 解壓版 zip file 安裝

2 重要 修改python36.pt 件,去掉 import site 前的 號,即放開 import site 若不放開將會pip無法正確安裝。3 安裝pip,執行 python get pip.py 4 成功後,即可用類似 python m pip install 或直接使用 pip insta...