为了安全地更新文件,我正在将更新版本写入临时文件,然后尝试用它覆盖原始文件。在shell unix脚本中,我会使用mv FROM TO
。
在Linux上运行python时,函数 os.rename 和 shutil.move 在目标文件名存在时执行原子替换操作。在Windows上,它们会失败。
行为可以通过一系列复制,重命名和删除操作来近似,但不能保证,这样一个自编写的替换操作可以完成或完全恢复。
是否可以在Windows上获得可靠的“重命名和覆盖”操作?
答案 0 :(得分:1)
从Python 3.3开始,函数os.replace
可用。它应该提供跨平台mv
- 类似语义。
可悲的是,当尝试跨文件系统移动文件时,它失败了。
即使文档说明 shutil.move 取决于 os.rename 的语义,它也适用于Windows,和支持跨文件系统边界移动文件。遗憾的是,我已经看到一些案例,由于某种原因,它仍然拒绝覆盖文件,所以如果可能的话, os.replace 应该更安全。