2012-04-23 73 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

相關問題