1. 程式人生 > 程式設計 >Python實現檔案壓縮和解壓的示例程式碼

Python實現檔案壓縮和解壓的示例程式碼

大家可能都熟悉.zip格式的檔案。它可以把多個檔案,壓縮成一個檔案。這在網路上傳輸時很有用,而且節省硬碟空間。

接下來,我們使用Python實現壓縮和解壓。

讀取ZIP檔案資訊

要讀取ZIP檔案的內容,首先必須建立一個ZipFile物件。ZipFile物件在概念上與File物件相似。

要建立一個 ZipFile 物件,就呼叫 zipfile.ZipFile()函式,向它傳入一個字串,表示.zip 檔案的檔名。 請注意,zipfile 是 Python 模組的名稱,ZipFile()是函式的名稱。

import zipfile

# 傳入壓縮檔案zfile.zip獲取相關資訊
zip_file = zipfile.ZipFile('zfile.zip')

# 獲取壓縮檔案中的內容
f_content = zip_file.namelist()

# 壓縮前的大小
f_size = zip_file.getinfo('zfile/a.txt').file_size

# 壓縮後的大小
c_size = zip_file.getinfo('zfile/a.txt').compress_size

ZipFile 物件有一個 namelist()方法,返回 ZIP 檔案中包含的所有檔案和資料夾 的字串的列表。這些字串可以傳遞給 ZipFile 物件的 getinfo()方法,返回一個關 於特定檔案的 ZipInfo 物件。ZipInfo 物件有自己的屬性,諸如表示位元組數的 file_size 和 compress_size,它們分別表示原來檔案大小和壓縮後文件大小。ZipFile 物件表示 整個歸檔檔案,而 ZipInfo 物件則儲存該歸檔檔案中每個檔案的有用資訊。

從 ZIP 檔案中解壓縮

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

import zipfile

zip_file = zipfile.ZipFile('zfile.zip')
# 解壓
zip_extract = zip_file.extractall()
zip_extract.close()

執行這段程式碼後, example.zip 的內容將被解壓縮到 C:\。 或者, 你可以向 extractall()傳遞的一個資料夾名稱,它將檔案解壓縮到那個資料夾,而不是當前工作 目錄。如果傳遞給 extractall()方法的資料夾不存在,它會被建立。例如,如果你用 exampleZip.extractall('C:\ delicious')取代處的呼叫,程式碼就會從 example.zip 中解壓 縮檔案,放到新建立的 C:\delicious 資料夾中。

ZipFile 物件的 extract()方法從 ZIP 檔案中解壓縮單個檔案。

建立和新增到 ZIP 檔案

要建立你自己的壓縮 ZIP 檔案,必須以“寫模式”開啟 ZipFile 物件,即傳入'w' 作為第二個引數(這類似於向 open()函式傳入'w',以寫模式開啟一個文字檔案)。

如果向 ZipFile 物件的 write()方法傳入一個路徑,Python 就會壓縮該路徑所指 的檔案,將它加到 ZIP 檔案中。write()方法的第一個引數是一個字串,代表要添 加的檔名。第二個引數是“壓縮型別”引數,它告訴計算機使用怎樣的演算法來壓 縮檔案。可以總是將這個值設定為 zipfile.ZIP_DEFLATED(這指定了 deflate 壓縮 演算法,它對各種型別的資料都很有效)。

import zipfile

zip_file = zipfile.ZipFile('new.zip','w')
# 把zfile整個目錄下所有內容,壓縮為new.zip檔案
zip_file.write('zfile',compress_type=zipfile.ZIP_DEFLATED)
# 把c.txt檔案壓縮成一個壓縮檔案
# zip_file.write('c.txt',compress_type=zipfile.ZIP_DEFLATED)
zip_file.close()

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

以上就是Python實現檔案壓縮和解壓的示例程式碼的詳細內容,更多關於python 壓縮和解壓的資料請關注我們其它相關文章!