使用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
相关产品推荐
相关产品推荐

