繁体   English   中英

为什么os模块没有办法删除非空目录?

[英]why os module has no way to delete non-empty directory?

Python 有 3 个主要的删除东西的功能

os.remove / os.unlink

In [2]: os.remove?
Signature: os.remove(path, *, dir_fd=None)
Docstring:
Remove a file (same as unlink()).

操作系统.rmdir

In [3]: os.rmdir?
Signature: os.rmdir(path, *, dir_fd=None)
Docstring:
Remove a directory.

但这不能删除非空目录,可以看出:

In [4]: os.rmdir('bla')
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-4-1907b7b0ecd9> in <module>
----> 1 os.rmdir('bla')

OSError: [Errno 39] Directory not empty: 'bla'

解决方案是第3个function: shutil.rmtree

我的问题是,为什么我们没有一个通用的 function 用于所有这些操作? (壳牌rm的简单包装器,带有"r" / "f"选项)

os模块不是 shell 命令的包装器。 os.rmdir是 C rmdir调用的包装器,这是一个不能删除整个目录树的低级操作。 同样, os.unlink是 C unlink function 的包装器。 os.remove也是 C unlink的包装,而不是 C remove ,令人困惑。)

如果您想要更高级别的操作,其中一些在shutil中可用。 例如, shutil.rmtree可以删除整个目录树。 这不是os.rmdir的默认行为,因为这容易出错且成本更高。

暂无
暂无

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

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