【问题标题】:How to close a Pandas ExcelWriter object if I am already using a context manager (and should I have to?)如果我已经在使用上下文管理器,如何关闭 Pandas ExcelWriter 对象(我应该这样做吗?)
【发布时间】:2021-03-20 20:11:02
【问题描述】:

我已阅读此答案:

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

但是这个解决方案对我不起作用,因为解决方案是不使用 ExcelWriter,因为他们只将一张表写入文件。他们还使用 xlsxwriter 作为他们的引擎,而我使用的是 openpyxl(如果这有所不同的话)。

我有一个对象,它使用 pandas ExcelWriter 对象将一系列工作表写入 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 Notebook 中运行脚本。

【问题讨论】:

    标签: python pandas pandas.excelwriter


    【解决方案1】:

    您好,我可能晚了一年,但我遇到了同样的问题,但似乎已经解决了。保存文件后,我在 Python 中删除了 ExcelWriter 对象。因此,您可以尝试以下方法:

    del stream
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多