【问题标题】:Pandas ExcelWriter Openpyxl is creating a corrupt file that has to be recoveredPandas ExcelWriter Openpyxl 正在创建一个必须恢复的损坏文件
【发布时间】:2021-08-15 19:46:27
【问题描述】:

以下代码成功创建了单个文件,除了最后一个必须在恢复模式下打开的文件。我试过调查所有可能的问题,但没有运气。

问题:根据以下代码,有什么原因导致大多数文件都正确创建,而最后一个文件已损坏?

for key, value in sorted(mdm_sheet_to_df_map.items()):           
    mdm_group = value.groupby('MDM')
    for MDM, group_df in mdm_group:
        attachment_mdm = attachment_path_mdm / f'{MDM}' / f'Q221 New Accounts - {MDM} - {today_string1}.xlsx'
        attachment1_mdm = os.makedirs(os.path.dirname(attachment_mdm), exist_ok=True)
        try:
            writer = ExcelWriter(attachment_mdm, engine = 'openpyxl', mode="a")
        except FileNotFoundError:
            writer = ExcelWriter(attachment_mdm, engine = 'openpyxl')
        group_df.to_excel(writer, sheet_name =f'{key}', index=False)
        writer.save()
    writer.close()

编辑: 运行脚本时,Python 中没有引发异常/错误。当我尝试打开正在恢复的最后一个文件时发现问题。所有其他文件正常打开。

【问题讨论】:

  • 可能有很多东西,没有文件几乎不可能分辨。
  • 我查看了源文件,没有任何问题。仍然不明白所有其他文件是如何完美创建的,但最后一个文件已损坏。我希望 Excel 能够更具体地说明导致其进入恢复模式的文件的问题。
  • 正如我所说,可能有很多东西。 Excel 非常繁琐,正如您所注意到的,错误消息很少有帮助。

标签: python excel pandas openpyxl pandas.excelwriter


【解决方案1】:

我现在也面临同样的问题。对我来说,解决方案是将编写器放入“with”而不是使用 .save 和 .close 方法。

for key, value in sorted(mdm_sheet_to_df_map.items()):           
    mdm_group = value.groupby('MDM')
    for MDM, group_df in mdm_group:
        attachment_mdm = attachment_path_mdm / f'{MDM}' / f'Q221 New Accounts - {MDM} - {today_string1}.xlsx'
        attachment1_mdm = os.makedirs(os.path.dirname(attachment_mdm), exist_ok=True)
        with pd.ExcelWriter(attachment_mdm, engine = 'openpyxl') as writer:
            group_df.to_excel(writer, sheet_name =f'{key}', index=False)
        

仍然不确定如何处理 FileNotFound。但我认为这应该有助于走这条路。

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多