os.path
模塊似乎是所有路徑相關功能的默認模塊。然而,listdir()
功能是os
模塊的一部分,而不是os.path
模塊,即使它接受路徑作爲其輸入。爲什麼要做這個設計決定?爲什麼listdir()函數是os模塊的一部分而不是os.path?
1
A
回答
11
我個人覺得os
和os.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.join
,os.path.dirname
,os.path.splitext
,只是字符串處理函數。os.listdir
,os.getcwd
,os.remove
,os.stat
都是系統調用,實際上觸摸文件系統。
反例:
os.path
有exists
,getmtime
,islink
,而其他的基本上都是包裝器os.stat
,並觸摸文件系統。我認爲他們被誤分類,但其他人可能會不同意。
一天的有趣的事實:你不會找到庫文件的頂層模塊,但實際上你可以導入任何平臺上的版本os.path
無需實際在該平臺上運行。這是在文檔中記載爲os.path
,
但是,您也可以導入,如果你想操作始終處於不同格式之一的路徑使用單獨的模塊。他們都有着相同的接口:
posixpath
爲UNIX風格的路徑ntpath
爲Windows路徑macpath
適用於舊的MacOS的路徑os2emxpath
用於OS/2 EMX路徑
你不能用os
做同樣的事情,它不會做任何se NSE。
相關問題
- 1. 什麼時候是一個scala部分函數而不是部分函數?
- 2. 爲什麼Actor.receive是部分函數?
- 3. 無法安裝模塊的'os'和'os.path'
- 4. 爲什麼第一部分打印4而不是3數字?
- 5. 爲什麼ActiveRecord不是一個模塊?
- 6. 塊爲什麼不是python標準庫的一部分?
- 7. 爲什麼Drupal Schema.org模塊包含RDFa而不是微數據?
- 8. 爲什麼objcopy排除一個部分而不是另一個部分?
- 9. 爲什麼const有時是函數簽名的一部分?
- 10. os.path如何映射到posixpath.pyc而不是os/path.py?
- 11. 在iOS/Swift中,MatrixHelper是什麼模塊的一部分?
- 12. 爲什麼Math是一個對象而String是一個函數?
- 13. 爲什麼我的函數返回一個Unit而不是Int?
- 14. 爲什麼addListener不是一個函數?
- 15. 爲什麼選擇「分享一切」而不是「分享一切」?
- 16. 爲什麼這個函數console.log而不是一次20次?
- 17. 函數被調用n + 1次而不是一次 - 爲什麼?
- 18. wordpress:add_action:爲什麼第二個參數是一個數組而不是函數名
- 19. 將驅動程序編譯爲內核的一部分,而不是模塊
- 20. 在JavaScript中,什麼是構造函數?而什麼不是?
- 21. C++爲什麼變量是函數而不是對象?
- 22. 在Julia中,爲什麼@printf是宏而不是函數?
- 23. 爲什麼__import __()正在返回包而不是模塊?
- 24. 什麼是函數參數的一部分?
- 25. 爲什麼要與工廠函數指定角模塊,而不是類似我如何指定節點模塊?
- 26. 什麼時候放置在`.rdata`部分而不是`.text`部分?
- 27. 什麼使用,而不是模數?
- 28. 爲什麼regex_match是一個函數而不是類regex的方法?
- 29. 爲什麼Python線程模塊中的類會暴露工廠函數而不是構造函數?
- 30. PHP:爲什麼是一個數字而不是數字?
很好的答案。謝謝。我同意你在os.path中放置非字符串操作。可能還有另一個原因。 – euphoria83 2012-04-23 06:58:38
@ euphoria83:「不破壞現有代碼」是一個非常好的理由。儘管他們可能已經將它移到了Python 3中。 – 2012-04-23 08:37:42