os.path
模块似乎是所有路径相关功能的默认模块。然而,该listdir()
函数是模块的一部分os
而不是os.path
模块,即使它接受路径作为其输入。为什么做出这个设计决定?
问问题
335 次
1 回答
12
os
我个人觉得和之间的划分os.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.join
,os.path.dirname
,os.path.splitext
, 只是字符串操作函数。os.listdir
,os.getcwd
,os.remove
,os.stat
都是系统调用,实际上触及文件系统。
反例:
os.path
hasexists
,getmtime
,islink
, 和其他基本上是 wrappers 的os.stat
,并触及文件系统。我认为它们分类错误,但其他人可能不同意。
当天有趣的事实:您不会在库文档的顶层中找到模块,但您实际上可以导入os.path
任何平台的版本,而无需在该平台上实际运行。这记录在文档中os.path
,
但是,如果您想操作始终采用其中一种不同格式的路径,您也可以导入和使用各个模块。它们都有相同的界面:
posixpath
对于 UNIX 风格的路径ntpath
对于 Windows 路径macpath
用于旧式 MacOS 路径os2emxpath
对于 OS/2 EMX 路径
你不能用 做同样的事情os
,这没有任何意义。
于 2012-04-23T03:04:58.470 回答