Python 保存文件并重命名旧版本
我已经对模型进行了pickle(转储),并将其保存起来,以便在web应用程序中使用。每次我重新运行模型分析时,文件都会再次被pickle并保存在(文件名+日期)下的同一文件夹中。如果新文件与上一个版本在同一天创建,我想重命名旧版本 我试图通过在末尾添加Python 保存文件并重命名旧版本,python,windows,file,file-io,filenames,Python,Windows,File,File Io,Filenames,我已经对模型进行了pickle(转储),并将其保存起来,以便在web应用程序中使用。每次我重新运行模型分析时,文件都会再次被pickle并保存在(文件名+日期)下的同一文件夹中。如果新文件与上一个版本在同一天创建,我想重命名旧版本 我试图通过在末尾添加“u archived”来重命名旧文件。下面的代码在不存在文件时正确地创建了一个新文件,但当文件已经存在时,重新运行它会删除旧文件并抛出错误 path = r'C:\scoring_model' dest = os.path.join(path,
“u archived”
来重命名旧文件。下面的代码在不存在文件时正确地创建了一个新文件,但当文件已经存在时,重新运行它会删除旧文件并抛出错误
path = r'C:\scoring_model'
dest = os.path.join(path, 'test12')
now = pd.datetime.now()
date_now = str(now.date())
model_name = 'model' + '_' + date_now
model_loc = os.path.join(dest, model_name)
if os.path.exists(model_loc):
try:
os.rename(model_loc, model_name + '_archived')
except:
os.remove(model_loc)
os.rename(model_loc, model_name + '_archived')
with open(model_loc, 'wb') as pfile:
pickle.dump(scoring_model, pfile)
else:
with open(model_loc, 'wb') as pfile:
pickle.dump(scoring_model, pfile)
我得到以下错误:
WindowsError Traceback (most recent call last)
<ipython-input-186-c132203d92f3> in <module>()
16 except:
17 os.remove(model_loc)
---> 18 os.rename(model_loc, model_name + '_archived')
19 with open(model_loc, 'wb') as pfile:
20 pickle.dump(scoring_model, pfile)
WindowsError: [Error 2] The system cannot find the given file
WindowsError回溯(最近一次调用上次)
在()
16除:
17操作系统移除(型号锁定)
--->18操作系统。重命名(型号锁定,型号名称+“\u存档”)
19带有开放式(型号锁定,“wb”)作为pfile:
20酸洗倾倒(划线模型,pfile)
WindowsError:[错误2]系统找不到给定的文件
在重命名文件时,该文件似乎已被删除。如果您删除了os.remove(model_loc)
调用,那么应该可以修复它。发生这种情况是因为您在调用os.remove()
之后正在调用os.rename()
。在Windows中,尝试重命名不存在的文件将在Python中引发异常。您需要查找根本原因。如果捕获到任何异常,则可以隐藏实际原因
if os.path.exists(model_loc):
try:
os.rename(model_loc, model_name + '_archived') <-- wrong
except:
os.remove(model_loc) <-- wrong
os.rename(model_loc, model_name + '_archived') <-- wrong
with open(model_loc, 'wb') as pfile:
pickle.dump(scoring_model, pfile)
不过,您应该尝试捕捉正确的异常。在这里,我们仍然可以捕捉到所有信息。我删除了os.remove(model_-loc),但出现以下错误:“Windows错误:[error 183]如果文件已经存在,则无法创建文件”,如下所述,在删除os.remove(model_-loc)时,对Kevin作出响应我得到了一个不同的error@figgy只有当你清楚地解释清楚你想要实现的目标时,我才能帮助你?你目前的问题没有恰当地表达这一点。例如,如果当前文件名为abc,并且您正在运行该程序,是否希望将其重命名为abc_archived,并将新文件命名为abc?如果是,那么如果程序第三次再次运行会发生什么?尝试将abc重命名为abc_archived将出现错误,因为已存在另一个同名文件。你打算如何解决这个问题?谢谢你提出了一个很好的观点。当文件在同一天多次保存时,我看到了这个过程出错的地方。目标是重命名文件的旧版本,而不是覆盖它们。如果文件在同一天多次保存,那么重命名/存储它们的最佳方法是什么,以便保存它们并与其他版本区分开来?我考虑过使用文件的时间戳,或者有人提到了使用“软链接”的可能性。谢谢你用“目标”提醒我。我用open(model_loc,'wb')…在
os.rename(…)
下面添加了代码,以使其工作。我还将时间戳添加到文件名中,以区分不同的版本。
if os.path.exists(model_loc):
try:
target = os.path.join(dest, model_name + '_archived')
os.rename(model_loc, target)
except:
with open(model_loc, 'wb') as pfile:
pickle.dump(scoring_model, pfile)