zip文件格式是通用的文檔壓縮標準,在ziplib模塊中,使用ZipFile類來操作zip文件,下面具體介紹一下:
創建一個ZipFile對象
class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]]) #表示一個zip文件
參數file: 表示文件的路徑或類文件對象(file-like object);
參數mode:指示打開zip文件的模式,默認值爲'r',表示讀已經存在的zip文件,也可以爲'w'或'a','w'表示新建一個zip文檔或覆蓋一個已經存在的zip文檔,'a'表示將數據附加到一個現存的zip文檔中。
參數compression:表示在寫zip文檔時使用的壓縮方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。ZIP_STORE是默認的,表示不壓縮;ZIP_DEFLATED表示壓縮
參數allowZip64如果要操作的zip文件大小超過2G,應該將allowZip64設置爲True。
ZipFile對象常用的方法和屬性:
ZipFile.getinfo(name)::獲取zip文檔內指定文件的信息。返回一個zipfile.ZipInfo對象,它包括文件的詳細信息。
ZipFile.infolist():獲取zip文檔內所有文件的信息,返回一個zipfile.ZipInfo的列表。
ZipFile.namelist():獲取zip文檔內所有文件的名稱列表。
ZipFile.extract(member[, path[, pwd]]):將zip文檔內的指定文件解壓到當前目錄。
參數member:指定要解壓的文件名稱或對應的ZipInfo對象;(需要解壓縮的文件名兒列表)
參數path指定了解析文件保存的文件夾;
參數pwd爲解壓密碼。
ZipFile.printdir():將zip文檔內的信息打印到控制檯上。
ZipFile.setpassword(pwd):設置zip文檔的密碼。
ZipFile.read(name[, pwd]):獲取zip文檔內指定文件的二進制數據。
zipfile.write(filename[, arcname[, compress_type]]):將文件寫到壓縮包中
filename爲文件路徑,
arcname爲添加到zip文檔之後保存的名稱;未指定將按 filename進行壓縮;
參數compress_type表示壓縮方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED
Class ZipInfo
ZipFile.getinfo(name) 方法返回的是一個ZipInfo對象,表示zip文檔中相應文件的信息。它支持如下屬性:
- ZipInfo.filename: 獲取文件名稱。
- ZipInfo.date_time: 獲取文件最後修改時間。返回一個包含6個元素的元組:(年, 月, 日, 時, 分, 秒)
- ZipInfo.compress_type: 壓縮類型。
- ZipInfo.comment: 文檔說明。
- ZipInfo.extr: 擴展項數據。
- ZipInfo.create_system: 獲取創建該zip文檔的系統。
- ZipInfo.create_version: 獲取 創建zip文檔的PKZIP版本。
- ZipInfo.extract_version: 獲取 解壓zip文檔所需的PKZIP版本。
- ZipInfo.reserved: 預留字段,當前實現總是返回0。
- ZipInfo.flag_bits: zip標誌位。
- ZipInfo.volume: 文件頭的卷標。
- ZipInfo.internal_attr: 內部屬性。
- ZipInfo.external_attr: 外部屬性。
- ZipInfo.header_offset: 文件頭偏移位。
- ZipInfo.CRC: 未壓縮文件的CRC-32。
- ZipInfo.compress_size: 獲取壓縮後的大小。
- ZipInfo.file_size: 獲取未壓縮的文件大小。
案例
文檔夾壓縮
f = zipfile.ZipFile('sss_db.zip', 'w', zipfile.ZIP_DEFLATED)
for dirpath, dirnames, filenames in os.walk(file):
save_path = os.path.relpath(dirpath, file) #獲取以壓縮文件夾開始的相對路徑
for filename in filenames:
f.write(os.path.join(dirpath, filename), os.path.join(save_path, filename)) f.close()
文檔解壓
#解壓zip格式文件
file = 'sss_db.zip'
zip_file = zipfile.ZipFile(os.path.join(path, file))
for names in zip_file.namelist():
zip_file.extract(names, path)
zip_file.close()