You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用openpyxl与pandas读取Excel时二次调用出现损坏及BadZipFile错误

解决二次调用read_excel触发BadZipFile且文件损坏的问题

问题根源

  • 第一次调用pd.read_excel后,文件资源没被正确释放,第二次读取时操作的是被占用/部分损坏的文件句柄
  • openpyxl引擎在某些场景下会隐式对文件执行写入操作(比如意外的空保存),直接破坏了xlsx的zip结构

可行解决办法

方法1:用with语句手动管理文件句柄

每次读取都通过with打开文件,用完自动关闭,彻底避免资源泄漏:

def exm_fct():
    sheet = 'sheet_name'
    with open(file_name, 'rb') as f:
        read_data = pd.read_excel(f, sheet_name=sheet, engine='openpyxl', usecols="A:C", skiprows=1)
    return read_data

方法2:提前加载工作簿复用对象

如果要多次读取同一文件,先一次性加载工作簿,之后直接复用这个对象,避免重复打开文件:

# 在函数外部提前加载,只读模式更安全
wb = load_workbook(file_name, read_only=True)

def exm_fct():
    sheet = 'sheet_name'
    read_data = pd.read_excel(wb, sheet_name=sheet, usecols="A:C", skiprows=1)
    return read_data

read_only=True不仅能防止误写入原文件,还能提升大文件的读取效率。

方法3:排查文件占用情况

确保没有其他进程(比如本地Excel软件)正在打开这个文件,同时运行程序的账号有足够的文件读写权限,避免因权限冲突导致文件损坏。

内容的提问来源于stack exchange,提问作者TOm_99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:12:09