Python ZipFile提取澳印WinZip加密压缩包报错求助
解决Python ZipFile模块不支持WinZip加密压缩包的问题
核心原因
Python标准库的zipfile模块仅支持传统的ZipCrypto加密算法,而WinZip默认可能使用了AES加密(更高强度);另外如果压缩时用了zipfile不支持的压缩方法(比如部分WinZip专属格式),也会触发该错误。
具体解决思路
调整WinZip的压缩加密设置
让发送方在WinZip压缩时做以下配置:- 压缩格式选择「Zip(传统)」,确保使用Deflate压缩算法
- 加密方式选择「ZipCrypto」(而非AES-128/AES-256)
这样生成的压缩包就能被标准库zipfile正常识别。
改用支持AES加密的第三方库
如果发送方必须用AES加密,直接用pyzipper替代标准库zipfile——这个库完全兼容zipfile的API,同时支持AES加密:- 先安装依赖:
pip install pyzipper - 修改代码:
import pyzipper # 替换原ZipFile为AESZipFile with pyzipper.AESZipFile(self.DIR_ATT + att) as zipObj: listOfFileNames = zipObj.namelist() print(listOfFileNames) for file in listOfFileNames: print("FILE:", file) if str(att.strip(".zip") + "/SR1000C01A") in file: print("FILE FOUND") print("password:", password) zipObj.extract(file, path=self.DIR_ATT, pwd=password.encode()) # 移除多余的zipObj.close(),with语句会自动管理文件关闭 df = pd.read_csv(self.DIR_ATT + file)
- 先安装依赖:
修复原代码的冗余操作
原代码在with代码块内调用了zipObj.close(),这属于多余操作——with语句会自动管理文件对象的生命周期,提前关闭可能导致后续操作出现异常,建议直接删除该行。
内容的提问来源于stack exchange,提问作者Ludogiraud
相关产品推荐
相关产品推荐

