os.path --- 常見的路徑名操作

原始碼: Lib/genericpath.pyLib/posixpath.py (用於 POSIX 系統) 和 Lib/ntpath.py (用於 Windows).


該模組實現了一些有用的路徑名操作函式。若要讀取或寫入檔案,請參閱 open() 函式,要存取檔案系統,請參閱 os 模組。路徑參數可以以字串、位元組或任何依照 os.PathLike 協定實作的物件傳遞。

與 Unix shell 不同,Python 不會自動進行路徑展開 (path expansions)。當應用程式需要進行類似 shell 的路徑展開時,可以明確地叫用 expanduser()expandvars() 等函式。(另請參閱 glob 模組。)

也參考

pathlib 模組提供了高階的路徑物件。

備註

所有這些函式都只接受位元組或字串物件作為參數。如果回傳的是路徑或檔案名稱,結果將是相同型別的物件。

備註

由於不同的作業系統具有不同的路徑命名慣例,在標準函式庫中的路徑模組有數個版本可供使用,而 os.path 模組都會是運行 Python 之作業系統所適用本地路徑。然而,如果你想要操作始終以某個不同於本機格式表示的路徑,你也可以引入並使用對應的模組。它們都具有相同的介面:

  • posixpath 用於 UNIX 形式的路徑

  • ntpath 用於 Windows 的路徑

在 3.8 版的變更: 對於包含有作業系統層級無法表示之字元或位元組的路徑,exists()lexists()isdir()isfile()islink()ismount() 函式現在會回傳 False,而不是引發例外。

os.path.abspath(path)

回傳經正規化的絕對路徑名 path 。在大多數平台上,這等效於按照以下方式呼叫 normpath(join(os.getcwd(), path))

在 3.6 版的變更: 接受一個 path-like object

os.path.basename(path, /)

回傳路徑名 path 的基底名稱。這是將 path 傳遞給函式 split() 後回傳結果中的第二個元素。請注意,此函式的結果與 Unix 的 basename 程式不同;對於 '/foo/bar/'basename 回傳 'bar',而 basename() 函式回傳空字串('')。

在 3.6 版的變更: 接受一個 path-like object

os.path.commonpath(paths)

回傳可疊代物件 paths 中每個路徑名稱的最長共同子路徑。如果 paths 同時包含絕對路徑名稱和相對路徑名稱、paths 位於不同的驅動機或 paths 為空,則引發 ValueError。與 commonprefix() 不同,此函式回傳的是有效路徑。

在 3.5 版被加入.

在 3.6 版的變更: 接受一個類路徑物件的序列。

在 3.13 版的變更: Any iterable can now be passed, rather than just sequences.

os.path.commonprefix(list, /)

回傳 list 中所有字串的最長共有字串前綴(逐字元比較)。如果 list 為空,則回傳空字串('')。

警告

由於此函式是逐字元比較,因此可能會回傳無效的路徑。如果你需要一個共同的路徑前綴,那麼此函式實作的演算法並不安全。請使用 commonpath() 來尋找共同的路徑前綴。

>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
'/usr/l'

>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
'/usr'

在 3.6 版的變更: 接受一個 path-like object

os.path.dirname(path, /)

回傳路徑名 path 的目錄名稱。這是將 path 傳遞給函式 split() 後回傳之成對結果中的第一個元素。

在 3.6 版的變更: 接受一個 path-like object

os.path.exists(path)

如果 path 是一個存在的路徑或一個開啟的檔案描述器則回傳 True。對於已損壞的符號連結則回傳 False。在某些平台上,即使 path 實際存在,如果未被授予執行 os.stat() 的權限,此函式仍可能回傳 False

在 3.3 版的變更: 現在 path 可以是一個整數:如果它是一個開啟的檔案描述器,則回傳 True;否則回傳 False

在 3.6 版的變更: 接受一個 path-like object

os.path.lexists(path)

如果 path 是一個存在的路徑則回傳 True,對已損壞的符號連結也是。在缺乏 os.lstat() 的平台上,與 exists() 函式等效。

在 3.6 版的變更: 接受一個 path-like object

os.path.expanduser(path)

在 Unix 和 Windows 上,將引數中以 ~~user 開頭的部分替換為該 user 的家目錄。

在 Unix 上,如果環境變數 HOME 有被設置,則將初始的 ~ 替換為該變數的值;否則將使用內建模組 pwd 在密碼目錄中查找目前使用者的家目錄。對於初始的 ~user,直接在密碼目錄中查找該使用者的家目錄。

在 Windows 上,如果 USERPROFILE 有被設置,則使用該變數的值;否則將結合 HOMEPATHHOMEDRIVE。對於初始的 ~user,會檢查目前使用者的家目錄的最後一個目錄元件是否與 USERNAME 相符,如果相符則替換它。

如果展開失敗或路徑不以波浪符號 (tilde) 開頭,則回傳原始路徑,不做任何變更。

在 3.6 版的變更: 接受一個 path-like object

在 3.8 版的變更: 在 Windows 上不再使用 HOME 變數。

os.path.expandvars(path)

回傳已展開環境變數的引數。形如