在Windows上移动文件并覆盖Python 3.6中存在的内容

时间:2018-02-09 15:53:26

标签: python windows filesystems

为了安全地更新文件,我正在将更新版本写入临时文件,然后尝试用它覆盖原始文件。在shell unix脚本中,我会使用mv FROM TO

在Linux上运行python时,函数 os.rename shutil.move 在目标文件名存在时执行原子替换操作。在Windows上,它们会失败。

行为可以通过一系列复制,重命名和删除操作来近似,但不能保证,这样一个自编写的替换操作可以完成或完全恢复。

是否可以在Windows上获得可靠的“重命名和覆盖”操作?

1 个答案:

答案 0 :(得分:1)

从Python 3.3开始,函数os.replace可用。它应该提供跨平台mv - 类似语义。

可悲的是,当尝试跨文件系统移动文件时,它失败了。

即使文档说明 shutil.move 取决于 os.rename 的语义,它也适用于Windows,支持跨文件系统边界移动文件。遗憾的是,我已经看到一些案例,由于某种原因,它仍然拒绝覆盖文件,所以如果可能的话, os.replace 应该更安全。