Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么listdir()函数是os模块的一部分而不是os.path?_Python_Listdir - Fatal编程技术网

Python 为什么listdir()函数是os模块的一部分而不是os.path?

Python 为什么listdir()函数是os模块的一部分而不是os.path?,python,listdir,Python,Listdir,os.path模块似乎是所有路径相关函数的默认模块。然而,listdir()函数是os模块的一部分,而不是os.path模块,即使它接受路径作为输入。为什么要做出这个设计决定?我个人觉得os和os.path之间的划分有点不一致。根据文档,os.path应该只是与特定平台的路径一起工作的模块的别名(即,在OSX、Linux和BSD上,您将获得posixpath,在Windows或古老的Mac上,您将获得其他东西) >>>导入操作系统 >>>帮助(操作系统) 有关模块操作系统的帮助: 名称 操作系统

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

我个人觉得
os
os.path
之间的划分有点不一致。根据文档,
os.path
应该只是与特定平台的路径一起工作的模块的别名(即,在OSX、Linux和BSD上,您将获得
posixpath
,在Windows或古老的Mac上,您将获得其他东西)

>>>导入操作系统 >>>帮助(操作系统) 有关模块操作系统的帮助: 名称 操作系统-Mac、NT或Posix的操作系统例程,具体取决于我们使用的系统。 ... >>>帮助(os.path) 有关模块posixpath的帮助: 名称 posixpath—Posix路径名上的常见操作。
listdir
函数不在路径本身上运行,而是在路径标识的目录上运行。
os.path
中的大多数函数在实际路径上运行,而不是在文件系统上运行

这意味着
os.path
中的许多函数都是字符串操作函数,而
os
中的大多数函数都是IO函数/syscalls

示例:

  • os.path.join
    os.path.dirname
    os.path.splitext
    ,都是字符串操作函数

  • os.listdir
    os.getcwd
    os.remove
    os.stat
    都是系统调用,实际上是触摸文件系统

反例:

  • os.path
    具有
    存在
    getmtime
    islink
    ,以及其他基本上是围绕
    os.stat
    的包装,并触摸文件系统。我认为他们被错误分类,但其他人可能不同意。
当天的有趣事实:您在库文档的顶层找不到模块,但您实际上可以为任何平台导入
os.path的版本,而无需在该平台上实际运行。这记录在
os.path
的文档中

但是,如果要操纵始终采用不同格式之一的路径,也可以导入和使用各个模块。它们都有相同的接口:

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

你不能用
操作系统做同样的事情,这没有任何意义。

回答得好。谢谢我同意您在os.path中放置非字符串操作。可能还有另一个原因。@euphoria83:“不破坏现有代码”是一个很好的理由。尽管他们本可以把它移到Python3上。 >>> import os >>> help(os) Help on module os: NAME os - OS routines for Mac, NT, or Posix depending on what system we're on. ... >>> help(os.path) Help on module posixpath: NAME posixpath - Common operations on Posix pathnames.