繁体   English   中英

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

[英]Difference between os.replace() and os.rename()?

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

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

os.replace()
os.rename()

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

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

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

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

os.replaceos.rename在 POSIX 系统上是相同的 function,但在 Windows 上os.replace将调用MoveFileExW并设置MOVEFILE_REPLACE_EXISTING标志以提供与 POSIX 系统相同的效果。

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

os.重命名()

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

操作系统.replace()

os.replace()方法也用于重命名文件或目录。

但:

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

来自文档

os.replace()

将文件或目录 src 重命名为 dst。 如果 dst 是目录,则会引发 OSError。 如果 dst 存在并且是一个文件,如果用户有权限,它将被静默替换。 如果 src 和 dst 在不同的文件系统上,操作可能会失败。 如果成功,重命名将是一个原子操作(这是 POSIX 要求)。

os.rename()

将文件或目录 src 重命名为 dst。 如果 dst 存在,则在许多情况下操作将失败并出现 OSError 子类:在 Windows 上,如果 dst 存在,则始终会引发 FileExistsError。 在 Unix 上,如果 src 是文件并且 dst 是目录,反之亦然,将分别引发 IsADirectoryError 或 NotADirectoryError。 如果两者都是目录且 dst 为空,则 dst 将被静默替换。 如果 dst 是非空目录,则会引发 OSError。 如果两者都是文件,dst 如果用户有权限,它将被静默替换。 如果 src 和 dst 在不同的文件系统上,该操作可能会在某些 Unix 风格上失败。 如果成功,重命名将是一个原子操作(这是 POSIX 要求)。 这个 function 可以支持指定 src_dir_fd 和/或 dst_dir_fd 以提供相对于目录描述符的路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM