如果我已经在使用上下文管理器(我应该这样做吗?)

2024-04-19 05:20:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我读过这个答案:

Pandas / xlsxwriter writer.close() does not completely close the excel file

但是这个解决方案对我不起作用,因为解决这个问题的方法是不使用ExcelWriter,因为他们只在文件中写入一张纸。他们也使用xlsxwriter作为他们的引擎,而我使用的是openpyxl(如果这有区别的话)

我有一个对象,它使用一个Excel Writer对象将一系列工作表写入xlsx文件

import pandas as pd

with pd.ExcelWriter("file.xlsx",mode='w') as stream:
    for sheet, dataframe in dataframe_dictionary.items():
        dataframe.to_excel(stream, sheet_name=sheet)
    other_dataframe.to_excel(stream, sheet_name='other')

问题是,有时,如果在上下文管理器中引发异常,pandas不会正确关闭文件。因此,当我尝试删除它时(在python脚本完成运行后,在我的python脚本之外),我会收到一条错误消息

"The action can't be completed because the file is open in Python"

这是熊猫身上的虫子还是我做错了什么?除了块,上下文管理器是否需要放在try中?我认为上下文管理器的全部目的是为您进行清理?有没有办法检查文件是否仍处于打开状态,如果文件仍处于打开状态,则将其关闭?我正在Jupyter笔记本中运行脚本


Tags: 文件the对象脚本dataframepandas管理器close