首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >os.replace()和os.rename()之间的区别?

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

Stack Overflow用户
提问于 2021-09-28 14:43:27
回答 3查看 3.4K关注 0票数 4

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

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

代码语言:javascript
复制
os.replace()
os.rename()

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-09-28 15:07:24

在POSIX系统上,如果用户有足够的权限,重命名系统调用将悄悄地替换目标文件。在Windows上,情况并非如此。

os.replaceos.rename在POSIX系统上是相同的功能,但是在MoveFileExW上,os.replace将使用设置MOVEFILE_REPLACE_EXISTING标志的方式调用MoveFileExW,从而产生与POSIX系统相同的效果。

如果您想要一致的跨平台行为,您应该考虑始终使用os.replace

票数 5
EN

Stack Overflow用户

发布于 2021-09-28 14:51:53

os.rename()

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

os.replace()

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

但是:

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

Stack Overflow用户

发布于 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来提供相对于目录描述符的路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69363867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档