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