python中使用openpyxl模块时报错: File is not a zip file

博客主要讲述Python中使用openpyxl模块时出现‘File is not a zip file’报错的原因及解决办法。报错最大原因是文件并非真正的xlsx文件,如用xlwt新建或修改后缀名得到的文件。解决办法是用office新建xlsx文件,还分享了网友使用openpyxl的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python中使用openpyxl模块时报错: File is not a zip file。

最大的原因就是不是真正的 xlsx文件, 如果是通过 库xlwt  新建的文件,或者是通过自己修改后缀名得到的 xlsx文件,都会报错,我遇到的解决办法基本都是自己使用 office 新建一个xlsx文件,网上说的是由于新版 office 加密的原因,只能通过 office 的软件才能建立真正的xlsx文件。

同时来自网友的经验:
#Python大坑:openpyxl和(xlrd,xlwt)不可混用!
#工程名、包名、文件名、模块名绝对不可重复!
#(xlrd、xlwt)读写过的文件千万不可让openpyxl读写

 

openpyxl 这是一个第三方库,可以处理xlsx格式的Excel文件。

openpyxl 的读写excel文件:

 from openpyxl import load_workbook
 book = load_workbook(path)
writer = pd.ExcelWriter(path, engine='openpyxl')
writer.book = book
 df.to_excel(excel_writer=writer, sheet_name="sheet1")

对比 pandas 的:

writer = pd.ExcelWriter(savepath)
df.to_excel(excel_writer=writer, sheet_name="sheet1")

转载于:https://www.cnblogs.com/BackingStar/p/10923891.html

### 使用 `openpyxl` 遇到 `zipfile.BadZipFile: File is not a zip file` 错误的解决方案 当使用 `openpyxl` 处理 Excel 文件并遇到 `zipfile.BadZipFile: File is not a zip file` 的错误提示,这通常意味着文件并非有效的 `.xlsx` 格式文件。此类问题可能由多种原因引起。 #### 可能的原因分析 1. **文件损坏** 如果目标文件已经损坏,则尝试读取它会引发异常。应先确认源文件是否完好无损[^3]。 2. **文件格式不符** 尽管扩展名为 .xlsx 或其他 Office Open XML 扩展名,但如果实际内容不符合此标准(可能是旧版本 Excel 文件或其他类型的文档),也会触发相同错误消息。 3. **文件被加密或锁定** 若文件设置了密码保护或者其他形式的安全措施,在未提供适当凭证的情况下访问同样会产生上述异常情况。确保所处理的目标文件没有任何安全限制。 4. **路径配置不当** 需要验证所提供的文件路径是否正确指向预期的工作簿位置;如果路径有误,可能会试图解析不存在的对象而抛出类似的异常信息[^1]。 5. **第三方应用干扰** 某些情况下,安装于系统的其它应用程序可能会影响 Python 对特定类型文件的操作行为,建议排查是否有类似因素存在[^2]。 #### 实际操作指南 为了有效解决问题,可以按照以下方法逐一检验: - **检查文件状态** 确认待读取的 Excel 文档能否正常打开,并且其内部结构没有明显缺陷。可以通过双击图标或者借助专门工具来完成初步检测工作。 - **转换文件格式** 假设怀疑当前使用的文件版本较老或是非兼容模式创建而成,那么不妨考虑将其另存为最新版次的标准格式再试一次。 - **解除潜在约束条件** 查看是否存在任何形式的数据防护机制作用于此处——比如只读属性设置、区域策略限定等,并采取相应手段予以移除。 - **简化测试环境** 构建一个独立的小型项目用于重现现象以便更好地定位具体成因所在。下面给出一段简单的代码片段作为示范用途: ```python from openpyxl import load_workbook try: wb = load_workbook('example.xlsx') except Exception as e: print(f'Error occurred while loading workbook: {e}') else: sheet_names = wb.sheetnames print(sheet_names) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值