我想使用 python 将文件从一个目录移动到 Linux 中的另一个目录。我希望实现类似于 bash
mv
命令的行为。
这两个命令在实践中有何区别
os.replace()
os.rename()
是否简单的是,如果目标中存在文件,
os.rename()
会引发错误,而os.replace()
会覆盖它?
此外,如果我看到另一个次要区别,
os.replace()
需要一个文件作为目标,而不仅仅是目录。
我可以在任何地方找到直接答案。
在 POSIX 系统上,如果用户具有足够的权限,则 rename 系统调用将默默地替换目标文件。 在 Windows 上情况并非如此:始终会引发 FileExistsError。
os.replace
和 os.rename
在 POSIX 系统上是相同的函数,但在 Windows 上 os.replace
将调用 MoveFileExW
并设置 MOVEFILE_REPLACE_EXISTING
标志以提供与 POSIX 系统上相同的效果。
如果您想要一致的跨平台行为,您应该考虑在整个过程中使用
os.replace
。
os.rename()
Python 中的os.rename()
方法用于重命名文件或目录。
此方法将源文件/目录重命名为指定的目标文件/目录。
os.replace()
Python中的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。如果两者都是文件,则如果用户有权限,它将被静默替换。如果 src 和 dst 位于不同的文件系统上,则该操作可能会在某些 Unix 版本上失败。如果成功,重命名将是一个原子操作(这是 POSIX 要求)。 此函数可以支持指定 src_dir_fd 和/或 dst_dir_fd 以提供相对于目录描述符的路径。