os.path --- 常見的路徑名操作¶
原始碼: Lib/genericpath.py、Lib/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有被設置,則使用該變數的值;否則將結合HOMEPATH和HOMEDRIVE。對於初始的~user,會檢查目前使用者的家目錄的最後一個目錄元件是否與USERNAME相符,如果相符則替換它。如果展開失敗或路徑不以波浪符號 (tilde) 開頭,則回傳原始路徑,不做任何變更。
在 3.6 版的變更: 接受一個 path-like object。
在 3.8 版的變更: 在 Windows 上不再使用
HOME變數。
- os.path.expandvars(path)¶
回傳已展開環境變數的引數。形如
$name或${name}的子字串會被替換為環境變數 name 的值。無效的變數名稱和對不存在變數的引用保持不變。在 Windows 上,除了支援
$name和${name}形式的展開外,還支援%name%形式的展開。在 3.6 版的變更: 接受一個 path-like object。
- os.path.getatime(path, /)¶