导入2020年大型.xlsx文件报错BadZipFile: File is not a zip file
报错原因排查与解决
首先明确:该报错不是编码问题导致的。
标准.xlsx格式本质是由XML文件打包成的ZIP压缩包,openpyxl读取.xlsx文件时会先执行ZIP解压操作,抛出BadZipFile: File is not a zip file说明目标文件不符合标准ZIP结构,你可以按照以下步骤排查解决:
问题排查&解决方案
- 优先验证文件有效性
手动双击打开任意一个待导入的2020年.xlsx文件,确认Excel能否正常打开、是否弹出「文件已损坏」「格式与后缀名不匹配」的提示。如果手动无法打开,说明文件本身损坏,需要重新获取完整的源文件。 - 校验文件格式与后缀是否匹配
这批文件有可能实际是旧版.xls二进制格式(非ZIP结构),只是被手动修改了后缀名为.xlsx。你可以临时更换读取引擎测试:# 需要先安装xlrd 1.2.0版本,新版本xlrd默认不支持xlsx格式 data2 = pd.read_excel(f, sheet_name=sheet_name2, engine='xlrd') - 修正路径读取逻辑
你的代码直接传递文件名给read_excel,如果运行时工作目录和文件实际存放目录不一致,会读取到无效文件。建议拼接绝对路径读取,同时把sheet名改为关键字参数避免版本兼容问题:data2 = pd.read_excel(os.path.join(path, f), sheet_name=sheet_name2, engine='openpyxl') - 排查加密/特殊格式问题
如果这批文件设置了工作簿密码、或是旧版WPS/Excel生成的带特殊保护的缓存文件,也会导致openpyxl无法识别ZIP结构,需要先解除文件保护/解密后再执行读取操作。 - 确认文件完整性
如果这批文件是导出/传输过程中被提前截断,也会丢失ZIP结构,核对你本地文件的大小和源文件大小是否一致,确认文件没有传输损坏。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

