zipfile 模組



ZIP 是最流行的用於存檔和壓縮的檔案格式之一。它自 MSDOS 和 PC 時代就已存在,並被著名的 PKZIP 應用程式使用。

Python 的標準庫提供 zipfile 模組,其中包含用於建立、提取、讀取和寫入 ZIP 存檔的類。

ZipFile() 函式

此函式根據檔案引數返回一個 ZipFile 物件,該引數可以是字串或檔案物件(由內建 open() 函式建立)。該函式需要一個 mode 引數,其預設值為 'r',儘管它可以取 'w' 或 'a' 值,分別以讀取、寫入或追加模式開啟存檔。

存檔預設情況下未壓縮。要指定要使用的壓縮演算法型別,必須將其中一個常量賦值給 compression 引數。

zipfile.ZIP_STORED

用於未壓縮的存檔成員。

zipfile.ZIP_DEFLATED

用於常用的 ZIP 壓縮方法。這需要 zlib 模組。

zipfile.ZIP_BZIP2

用於 BZIP2 壓縮方法。這需要 bz2 模組。

zipfile.ZIP_LZMA

用於 LZMA 壓縮方法。這需要 lzma 模組。

ZipFile 物件使用以下方法:

write() 方法

此方法將給定檔案新增到 ZipFile 物件。

import zipfile
newzip=zipfile.ZipFile('newzip.zip','w')
newzip.write('zen.txt')
newzip.close()

這會在當前目錄中建立 newzip.zip 檔案。可以透過以追加模式 ('a' 作為模式) 開啟存檔來向現有存檔新增其他檔案。

import zipfile
newzip=zipfile.ZipFile('newzip.zip','a')
newzip.write('json.txt')
newzip.close()

read() 方法

此方法從存檔中的特定檔案讀取資料。

import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
data = newzip.read('json.txt')
print (data)
newzip.close()

輸出

b'["Rakesh", {"marks": [50, 60, 70]}]'

printdir() 方法

此方法列出給定存檔中的所有檔案。

import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
newzip.printdir()
newzip.close()

輸出

File Name          Modified               Size
zen.txt       2023-03-30 21:55:48          132
json.txt      2023-04-03 22:01:56           35

extract() 方法

此方法預設將指定檔案從存檔提取到當前目錄,或者提取到作為第二個引數給出的目錄。

import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
newzip.extract('json.txt', 'newdir')
newzip.close()

extractall() 方法

此方法預設將存檔中的所有檔案提取到當前目錄。如有需要,請指定備用目錄作為引數。

import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
newzip.extractall('newdir')
newzip.close()

getinfo() 方法

此方法返回與給定檔案對應的 ZipInfo 物件。ZipInfo 物件包含檔案的不同元資料資訊。

以下程式碼從存檔中獲取 'zen.txt' 的 ZipInfo 物件,並從中檢索檔名、大小和日期時間資訊。

import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
info = newzip.getinfo('zen.txt')
print (info.filename, info.file_size, info.date_time)
newzip.close()

輸出

zen.txt 132 (2023, 3, 30, 21, 55, 48)

infolist() 方法

import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
info = newzip.infolist()
print (info)
newzip.close() 

輸出

[<ZipInfo filename='zen.txt' filemode='-rw-rw-rw-' file_size=132>,
<ZipInfo filename='json.txt' filemode='-rw-rw-rw-' file_size=35>]

namelist() 方法

ZipFile 物件的此方法返回存檔中所有檔案的列表。

import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
info = newzip.namelist()
print (info)
newzip.close()

輸出

['zen.txt', 'json.txt']

setpassword() 方法

此方法設定密碼引數,該引數必須在提取存檔時提供。

python_data_compression.htm
廣告