我想用python将一个文件从一个目录移动到另一个目录。我希望实现类似bash mv命令的行为。
这两种命令在实践中有什么区别?
os.replace()
os.rename()如果目标文件存在,os.rename()会引发错误,而os.replace()会覆盖它吗?
另外,如果我看到的另一个次要区别是,os.replace()需要一个文件作为目标,而不仅仅是目录。
我可以在任何地方找到一个直接的答案。
发布于 2021-09-28 15:07:24
在POSIX系统上,如果用户有足够的权限,重命名系统调用将悄悄地替换目标文件。在Windows上,情况并非如此。
os.replace和os.rename在POSIX系统上是相同的功能,但是在MoveFileExW上,os.replace将使用设置MOVEFILE_REPLACE_EXISTING标志的方式调用MoveFileExW,从而产生与POSIX系统相同的效果。
如果您想要一致的跨平台行为,您应该考虑始终使用os.replace。
发布于 2021-09-28 14:51:53
os.rename()
Python中的os.rename()方法用于重命名文件或目录。此方法将源文件/目录重命名为指定的目标文件/目录。
os.replace()
Python中的os.replace()方法也用于重命名文件或目录。
但是:
OSError。发布于 2021-09-28 14:56:25
来自文档
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要求)。此函数可以支持指定src_dir_fd和/或dst_dir_fd来提供相对于目录描述符的路径。
https://stackoverflow.com/questions/69363867
复制相似问题