2012-04-23 81 views

回答

11

我个人觉得osos.path之间的区别有点不一致。根据文档,os.path应该只是一个模块的别名,它适用于特定平台的路径(例如,在OS X,Linux和BSD上,您将获得posixpath,在Windows或古老的Mac上,您将获得其他东西)。

 
>>> 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. 

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做同样的事情,它不会做任何se NSE。

+0

很好的答案。谢谢。我同意你在os.path中放置非字符串操作。可能还有另一个原因。 – euphoria83 2012-04-23 06:58:38

+1

@ euphoria83:“不破坏现有代码”是一个非常好的理由。尽管他们可能已经将它移到了Python 3中。 – 2012-04-23 08:37:42

相关问题