【问题标题】:Why is the listdir() function part of os module and not os.path?为什么 listdir() 函数是 os 模块而不是 os.path 的一部分?
【发布时间】:2012-04-23 02:45:10
【问题描述】:

os.path 模块似乎是所有路径相关功能的默认模块。然而,listdir() 函数是os 模块的一部分,而不是os.path 模块的一部分,即使它接受路径作为其输入。为什么做出这个设计决定?

【问题讨论】:

    标签: python listdir


    【解决方案1】:

    我个人觉得osos.path 之间的划分有点不一致。根据文档,os.path 应该只是与特定平台的路径一起使用的模块的别名(即,在 OS X、Linux 和 BSD 上,你会得到posixpath,在 Windows 或古老的 Mac 上你会得到)会得到别的东西)。

    >>> 导入操作系统 >>> 帮助(操作系统) 关于模块 os 的帮助: 姓名 os - Mac、NT 或 Posix 的操作系统例程,具体取决于我们使用的系统。 ... >>> 帮助(os.path) 关于模块 posixpath 的帮助: 姓名 posixpath - 对 Posix 路径名的常见操作。

    listdir 函数不对路径 本身进行操作,而是对路径标识的目录进行操作。 os.path 中的大部分函数都在实际路径上运行,而不在文件系统上

    这意味着os.path中的许多函数是字符串操作函数,而os中的大多数函数是IO函数/系统调用。

    例子:

    • os.path.joinos.path.dirnameos.path.splitext,只是字符串操作函数。

    • os.listdiros.getcwdos.removeos.stat 都是系统调用,实际上是触及文件系统。

    反例:

    • os.pathexistsgetmtimeislink 和其他基本上是os.stat 的包装器,并触及文件系统。我认为它们分类错误,但其他人可能不同意。

    今日趣事:您不会在库文档的顶层找到这些模块,但您实际上可以为任何平台导入 os.path 的版本,而无需实际在那个平台上运行。这在os.path 的文档中有记录,

    但是,如果您想操作始终采用其中一种不同格式的路径,您也可以导入和使用各个模块。它们都有相同的界面:

    • posixpath 用于 UNIX 样式的路径
    • ntpath 用于 Windows 路径
    • macpath 用于旧式 MacOS 路径
    • os2emxpath 用于 OS/2 EMX 路径

    你不能对os做同样的事情,这没有任何意义。

    【讨论】:

    • 好答案。谢谢。我同意你在 os.path 中放置非字符串操作。可能还有其他原因。
    • @euphoria83:“不破坏现有代码”是一个非常的好理由。尽管他们本可以为 Python 3 移动它。
    猜你喜欢
    • 1970-01-01
    • 2010-11-09
    • 2020-04-22
    • 2016-12-07
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2022-10-05
    相关资源
    最近更新 更多