003. Python 操作 ZIP 標(biāo)準(zhǔn)庫:zipfile
ZIP 文件格式是一個常用的歸檔與壓縮標(biāo)準(zhǔn),在 Windows、Linux、MacOS 等多種操作系統(tǒng)中都有原生支持。Python 標(biāo)準(zhǔn)庫提供了?zipfile
?模塊,可以用來操作 ZIP 文件,提供了創(chuàng)建、打開、讀取、寫入、添加及列出 ZIP 文件的工具。?
優(yōu)點:
功能強大:
zipfile
庫提供了豐富的接口,可以方便地操作?ZIP 格式壓縮文件。使用方便:
zipfile
?庫是 Python 標(biāo)準(zhǔn)庫,開箱即用,文檔齊全。速度較快:關(guān)鍵部分代碼使用 C 實現(xiàn),速度高于原生?Python。
大文件支持:它可以處理使用?ZIP64 擴展(超過 4 GB 的 ZIP 文件)的 ZIP 文件。
缺點:
不支持分卷文件:截止目前(Python 3.11),不能處理分卷?ZIP?文件。
不支持加密:支持解密 ZIP 歸檔中的加密文件,但是目前不能創(chuàng)建一個加密的文件。
解密很慢:解密非常慢,因為它是使用原生?Python?而不是 C 實現(xiàn)的。
使用(Python 3.10.0)
1.創(chuàng)建
首先,需要先創(chuàng)建測試文件夾與文件:
再將多個文件壓縮到一個 ZIP 文件中:
添加壓縮文件方法為?zipfile.write(filename[, arcname[, compress_type]]),acrname 是壓縮文件中該文件的名字,默認(rèn)情況下和 filename 一樣。compress_type 的存在是因為 ZIP 文件允許被壓縮的文件可以有不同的壓縮類型。
2.讀取
與創(chuàng)建?ZIP 文件類似,僅需將 zipfile.ZipFile 的第二個參數(shù) mode 改為?'r' 即可。mode 和一般的文件操作一樣,'r' 表示打開一個存在的只讀 ZIP 文件;'w' 表示清空并打開一個只寫的 ZIP 文件,或創(chuàng)建一個只寫的 ZIP 文件;'a' 表示打開一個 ZIP 文件,并添加內(nèi)容。一般使用上下文管理器方式打開?ZIP 文件,使用:
讀取?ZIP 中文件:
3.校驗
使用?zipfile.is_zipfile(filename)?函數(shù)來檢測一個文件是否為 ZIP 文件。根據(jù)文件的 Magic Number(ZIP?文檔開頭為[PK] ,源于ZIP之父 Phil Katz 名字的首字母),如果是一個有效的 ZIP 文件則返回?True
,否則返回?False
。?
如果需要進一步檢測 ZIP 文件的內(nèi)部結(jié)構(gòu)是否正確,還可以先打開 ZIP 文件,再使用?testzip
方法來檢測 ZIP 文件中是否有損壞的文件。
該方法會讀取?ZIP 中的所有文件并檢查它們的 CRC 和文件頭。如果 ZIP 文件中有損壞的文件, 會返回第一個已損壞文件名稱。如果 ZIP 文件完整無損,則會返回 None
。
4.提取
zipfile 中提供了便捷的接口,可以方便快捷地從 ZIP 文件中提取所需的文件:
當(dāng)然,zipfile 還有不少其他方法,但用途有限,就不一一列舉了。
以上,完結(jié)撒花!

延伸閱讀
Python 標(biāo)準(zhǔn)庫 zipfile:https://docs.python.org/zh-cn/3/library/zipfile.html
Python Zipfile:https://zhuanlan.zhihu.com/p/301257655