【发布时间】:2021-08-25 09:09:22
【问题描述】:
我想做以下事情。创建一个临时文件并处理它。如果成功,将其重命名为真实文件。如果失败,则删除该文件。
我尝试了以下方法:
with tempfile.NamedTemporaryFile(dir=os.getcwd()) as f:
f.write(b'foobar')
f.delete = False
f.flush()
os.rename(f.name, 'foobar')
但是,当它试图删除它时,我仍然得到一个文件不存在的异常。我可能会使用 try-catch 来忽略此错误,但这会很丑陋,并且也可能会忽略其他错误。或者我可以使用mkstemp() 并自己管理删除,但这有一个问题,它返回的是文件描述符而不是文件对象,而且我找不到从文件描述符创建文件对象的方法。
这个问题有什么合适的解决办法吗?
【问题讨论】:
-
“我尝试删除文件时仍然收到文件不存在的异常”因为你重命名了它?
-
@DeepSpace:是的。问题是如何避免这种情况。
-
@petersohn:您需要 Windows 支持吗?
-
你不知道
os.fdopen?