python保存到excel由于python内存释放不彻底导致报

2023-01-28  本文已影响0人  长旅当歌

python由于内存管理的问题,在excel存档复写的过程容易导致excel被占用,然后复写失败,进而导致excel文件损坏;
找了一些文章,主要是介绍gc机制和代码的,做了尝试不好用;
介绍一个新的方案,把writer部分独立包装成一个函数,通过try函数来执行,执行成功返回1,执行失败返回0,这样就可以彻底吧writer包装在函数内部,确保顺利执行并且完整退出。
然后通过执行结果判断如果保存失败,就再进行一次保存。可以彻底解决excel覆写失败报错导致文件损坏的问题。

实际执行时候直接执行 SaveDataFrameToExcel(df,ExcelNameStr)即可

def DataExcelWriter(df,ExcelNameStr):
    #因为python内存释放机制问题,有几率导致数据存储到本地过程中保存失败
    #所以设置保存检查,成功返回1,失败返回0;如果保存失败会导致  DataExcelWriter() 函数结束重新执行,可以有效的释放原有的句柄占用
    #ExcelNameStr表示完整的excel名称包含格式后缀,例如'xxx.xlsx'
    try:
        with pd.ExcelWriter(ExcelNameStr) as writer:
            df.to_excel(writer,sheet_name=ExcelNameStr,index=False)
    except:
        return 0
    return 1

def SaveDataFrameToExcel(df,ExcelNameStr):
    #以下为保存操作的主函数
    count=0
    while (DataExcelWriter(df,ExcelNameStr)==0):
        print("...保存中...{}".format(count))#输出保存操作的次数
        count=count+1
    print("保存完成")
    return
上一篇下一篇

猜你喜欢

热点阅读