os.replace() 和 os.rename() 之间的区别?

KZi*_*vas 13 python linux

我想使用 python 将文件从一个目录移动到 Linux 中的另一个目录。我希望实现类似于 bashmv命令的行为。

这两个命令在实践中有何区别

os.replace()
os.rename()
Run Code Online (Sandbox Code Playgroud)

如果文件存在于目标中,而会覆盖它,是否os.rename()会引发错误os.replace()

另外,如果我看到另一个次要区别,那就是os.replace()需要一个文件作为目标而不仅仅是目录。

我可以在任何地方找到直接答案。

小智 14

在 POSIX 系统上,如果用户具有足够的权限,则重命名系统调用将默默地替换目标文件。Windows 上则不然。

os.replaceos.rename在 POSIX 系统上是相同的函数,但在 Windowsos.replace上将MoveFileExW使用MOVEFILE_REPLACE_EXISTING设置的标志进行调用,以提供与 POSIX 系统上相同的效果。

如果您想要一致的跨平台行为,您应该考虑os.replace在整个过程中使用。


Bla*_*ath 6

os.rename()

os.rename()Python 中的方法用于重命名文件或目录。此方法将源文件/目录重命名为指定的目标文件/目录。

os.replace()

os.replace()Python中的方法还用于重命名文件或目录。

但:

  • 如果目标是目录,OSError将引发。
  • 如果目标存在并且是一个文件,并且执行操作的用户具有权限,则它将被替换而不会出现错误。
  • 如果源和目标位于不同的文件系统上,此方法可能会失败