调用writer.close()时出现UnsupportedOperation: truncate错误求助
解决ExcelWriter调用
close()时的UnsupportedOperation: truncate错误 执行以下代码时,调用
writer.close()出现UnsupportedOperation: truncate错误,代码在一台系统正常运行,另一台系统报错:RA = pd.read_excel(file_path, header=0, sheet_name="Data") pivot_df = pd.DataFrame(RA) #Inserting Pivot pivot = pivot_df[filter2].pivot_table(index=['a','b', 'c'], values=['Total1','Total2'], aggfunc='sum', margins=True, margins_name='Total') #copy & pasting pivot to Summary sheet writer = pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') pivot.to_excel(writer, sheet_name='Summary', index=True) writer.close() writer.handles = None
可行解决方案
改用上下文管理器自动管理资源
放弃手动调用close(),用with语句让Python自动处理文件资源的打开和关闭,避免手动释放资源时的异常:RA = pd.read_excel(file_path, header=0, sheet_name="Data") pivot_df = pd.DataFrame(RA) pivot = pivot_df[filter2].pivot_table(index=['a','b', 'c'], values=['Total1','Total2'], aggfunc='sum', margins=True, margins_name='Total') with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer: pivot.to_excel(writer, sheet_name='Summary', index=True) # with块结束后自动完成写入和关闭,无需额外操作统一库版本
两台系统的pandas或openpyxl版本差异可能引发该问题:- 在两台系统分别执行
pip show pandas openpyxl查看版本信息 - 将两边的库版本统一,比如升级到最新稳定版:
pip install --upgrade pandas openpyxl
- 在两台系统分别执行
检查文件占用情况
确保目标Excel文件未被其他程序(如Excel客户端)占用,同时检查代码中是否有其他地方打开该文件但未正确关闭,避免文件句柄冲突。替换追加模式的实现逻辑(备选)
如果上述方法无效,可以通过加载现有工作簿的方式修改工作表:from openpyxl import load_workbook RA = pd.read_excel(file_path, header=0, sheet_name="Data") pivot_df = pd.DataFrame(RA) pivot = pivot_df[filter2].pivot_table(index=['a','b', 'c'], values=['Total1','Total2'], aggfunc='sum', margins=True, margins_name='Total') # 加载现有工作簿 book = load_workbook(file_path) writer = pd.ExcelWriter(file_path, engine='openpyxl') writer.book = book # 删除原有Summary表后重新写入 if 'Summary' in writer.book.sheetnames: del writer.book['Summary'] pivot.to_excel(writer, sheet_name='Summary', index=True) writer.save() writer.close()
内容的提问来源于stack exchange,提问作者Akshay Kumar
相关产品推荐
相关产品推荐

