os.path --- 常見路徑操作?
源代碼: Lib/posixpath.py (適用 POSIX), Lib/ntpath.py (適用 Windows NT), and Lib/macpath.py (適用 Macintosh)
該模塊在路徑名上實(shí)現(xiàn)了一些有用的功能:如需讀取或?qū)懭胛募垍⒁?open() ;有關(guān)訪問文件系統(tǒng)的信息,請參見 os 模塊。路徑參數(shù)可以字符串或字節(jié)形式傳遞。我們鼓勵應(yīng)用程序?qū)⑽募硎緸椋║nicode)字符串。不幸的是,某些文件名在Unix上可能無法用字符串表示,因此在Unix上平臺上需要支持任意文件名的應(yīng)用程序,應(yīng)使用字節(jié)對象來表示路徑名。反之亦然,在Windows平臺上僅使用字節(jié)對象,不能表示的所有文件名(以標(biāo)準(zhǔn) mbcs 編碼),因此Windows應(yīng)用程序應(yīng)使用字符串對象來訪問所有文件。
與unix shell不同,Python不執(zhí)行任何 自動 路徑擴(kuò)展。當(dāng)應(yīng)用程序需要類似shell的路徑擴(kuò)展時,可以顯式調(diào)用諸如 expanduser() 和 expandvars() 之類的函數(shù)。 (另請參見 glob 模塊。)
參見
pathlib 模塊提供高級路徑對象。
注解
所有這些函數(shù)都僅接受字節(jié)或字符串對象作為其參數(shù)。如果返回路徑或文件名,則結(jié)果是相同類型的對象。
注解
由于不同的操作系統(tǒng)具有不同的路徑名稱約定,因此標(biāo)準(zhǔn)庫中有此模塊的幾個版本。 os.path 模塊始終是適合Python運(yùn)行的操作系統(tǒng)的路徑模塊,因此可用于本地路徑。但是,如果操作的路徑 總是 以一種不同的格式顯示,那么也可以分別導(dǎo)入和使用各個模塊。它們都具有相同的界面:
posixpath用于Unix 樣式的路徑ntpath用于 Windows 路徑macpath用于舊 MacOS 樣式的路徑
-
os.path.abspath(path)? 返回路徑 path 的絕對路徑(標(biāo)準(zhǔn)化的)。在大多數(shù)平臺上,這等同于用
normpath(join(os.getcwd(), path))的方式調(diào)用normpath()函數(shù)。在 3.6 版更改: 接受一個 path-like object。
-
os.path.basename(path)? 返回路徑 path 的基本名稱。這是將 path 傳入函數(shù)
split()之后,返回的一對值中的第二個元素。請注意,此函數(shù)的結(jié)果與Unix basename 程序不同。basename 在'/foo/bar/'上返回'bar',而basename()函數(shù)返回一個空字符串 ('')。在 3.6 版更改: 接受一個 path-like object。
-
os.path.commonpath(paths)? 返回序列 paths 中每個路徑名稱的最長共同子路徑。 如果 paths 同時包含絕對和相對路徑名稱或者如果 paths 為空則會引發(fā)
ValueError。 與commonprefix()不同,此方法將返回一個有效路徑。可用性: Unix, Windows。
3.5 新版功能.
在 3.6 版更改: 接受一個 類路徑對象 序列。
-
os.path.commonprefix(list)? 接受包含多個路徑的 列表,返回所有路徑的最長公共前綴(逐字符比較)。如果 列表 為空,則返回空字符串 (
'')。注解
此函數(shù)是逐字符比較,因此可能返回?zé)o效路徑。要獲取有效路徑,參見
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 傳入函數(shù)
split()之后,返回的一對值中的第一個元素。在 3.6 版更改: 接受一個 path-like object。
-
os.path.exists(path)? 如果 path 指向一個已存在的路徑或已打開的文件描述符,返回
True。對于失效的符號鏈接,返回False。在某些平臺上,如果使用os.stat()查詢到目標(biāo)文件沒有執(zhí)行權(quán)限,即使 path 確實(shí)存在,本函數(shù)也可能返回False。在 3.3 版更改: path 現(xiàn)在可以是一個整數(shù):如果該整數(shù)是一個已打開的文件描述符,返回
True,否則返回False。在 3.6 版更改: 接受一個 path-like object。
-
os.path.lexists(path)? 如果 path 指向一個已存在的路徑,返回
True。對于失效的符號鏈接,也返回True。在缺失os.lstat()的平臺上等同于exists()。在 3.6 版更改: 接受一個 path-like object。
-
os.path.expanduser(path)? 在 Unix 和 Windows 上,將參數(shù)中開頭部分的
~或~user替換為當(dāng)前 用戶 的家目錄并返回。在 Unix 上,開頭的
~會被環(huán)境變量HOME代替,如果變量未設(shè)置,則通過內(nèi)置模塊pwd在 password 目錄中查找當(dāng)前用戶的主目錄。以~user開頭則直接在 password 目錄中查找。在 Windows 上,如果設(shè)置了
HOME和USERPROFILE則將使用它們,否則將使用HOMEPATH和HOMEDRIVE的組合。 原本的~user處理方式為從上述方法所生成的用戶路徑中截去最后一級目錄。如果展開路徑失敗,或者路徑不是以波浪號開頭,則路徑將保持不變。
在 3.6 版更改: 接受一個 path-like object。
-
os.path.expandvars(path)? 輸入帶有環(huán)境變量的路徑作為參數(shù),返回展開變量以后的路徑。
$name或${name}形式的子字符串被環(huán)境變量 name 的值替換。格式錯誤的變量名稱和對不存在變量的引用保持不變。在 Windows 上,除了
$name和${name}外,還可以展開%name%。在 3.6 版更改: 接受一個 path-like object。
-
os.path.getatime(path)? 返回 path 的最后訪問時間。返回值是一個浮點(diǎn)數(shù),為紀(jì)元秒數(shù)(參見
time模塊)。如果該文件不存在或不可訪問,則拋出OSError異常。
-
os.path.getmtime(path)? 返回 path 的最后修改時間。返回值是一個浮點(diǎn)數(shù),為紀(jì)元秒數(shù)(參見
time模塊)。如果該文件不存在或不可訪問,則拋出OSError異常。在 3.6 版更改: 接受一個 path-like object。
-
os.path.getctime(path)? 返回 path 在系統(tǒng)中的 ctime,在有些系統(tǒng)(比如 Unix)上,它是元數(shù)據(jù)的最后修改時間,其他系統(tǒng)(比如 Windows)上,它是 path 的創(chuàng)建時間。返回值是一個數(shù),為紀(jì)元秒數(shù)(參見
time模塊)。如果該文件不存在或不可訪問,則拋出OSError異常。在 3.6 版更改: 接受一個 path-like object。
-
os.path.getsize(path)? 返回 path 的大小,以字節(jié)為單位。如果該文件不存在或不可訪問,則拋出
OSError異常。在 3.6 版更改: 接受一個 path-like object。
-
os.path.isabs(path)? 如果 path 是一個絕對路徑,則返回
True。在 Unix 上,它就是以斜杠開頭,而在 Windows 上,它可以是去掉驅(qū)動器號后以斜杠(或反斜杠)開頭。在 3.6 版更改: 接受一個 path-like object。
-
os.path.isfile(path)? 如果 path 是
現(xiàn)有的常規(guī)文件,則返回True。本方法會跟蹤符號鏈接,因此,對于同一路徑,islink()和isfile()都可能為True。在 3.6 版更改: 接受一個 path-like object。
-
os.path.isdir(path)? 如果 path 是
現(xiàn)有的目錄,則返回True。本方法會跟蹤符號鏈接,因此,對于同一路徑,islink()和isdir()都可能為True。在 3.6 版更改: 接受一個 path-like object。
-
os.path.islink(path)? 如果 path 指向的
現(xiàn)有目錄條目是一個符號鏈接,則返回True。如果 Python 運(yùn)行時不支持符號鏈接,則總是返回False。在 3.6 版更改: 接受一個 path-like object。
-
os.path.ismount(path)? 如果路徑 path 是 掛載點(diǎn)`(文件系統(tǒng)中掛載其他文件系統(tǒng)的點(diǎn)),則返回 ``True`。在 POSIX 上,該函數(shù)檢查 path 的父目錄
path/..是否在與 path 不同的設(shè)備上,或者path/..和 path 是否指向同一設(shè)備上的同一 inode(這一檢測掛載點(diǎn)的方法適用于所有 Unix 和 POSIX 變體)。本方法不能可靠地檢測同一文件系統(tǒng)上的綁定掛載 (bind mount)。在 Windows 上,盤符和共享 UNC 始終是掛載點(diǎn),對于任何其他路徑,將調(diào)用GetVolumePathName來查看它是否與輸入的路徑不同。3.4 新版功能: 支持在Windows上檢測非根安裝點(diǎn)。
在 3.6 版更改: 接受一個 path-like object。
-
os.path.join(path, *paths)? 合理地拼接一個或多個路徑部分。返回值是 path 和 *paths 所有值的連接,每個非空部分后面都緊跟一個目錄分隔符 (
os.sep),除了最后一部分。這意味著如果最后一部分為空,則結(jié)果將以分隔符結(jié)尾。如果參數(shù)中某個部分是絕對路徑,則絕對路徑前的路徑都將被丟棄,并從絕對路徑部分開始連接。在 Windows 上,遇到絕對路徑部分(例如
r'\foo')時,不會重置盤符。如果某部分路徑包含盤符,則會丟棄所有先前的部分,并重置盤符。請注意,由于每個驅(qū)動器都有一個“當(dāng)前目錄”,所以os.path.join("c:", "foo")表示驅(qū)動器C:上當(dāng)前目錄的相對路徑 (c:foo),而不是c:\foo。在 3.6 版更改: 接受一個 類路徑對象 用于 path 和 paths 。
-
os.path.normcase(path)? 規(guī)范路徑名稱的大小寫。 在 Windows 上,將路徑名稱中的所有字符轉(zhuǎn)為小寫,并將正斜杠轉(zhuǎn)為反斜杠。 在其他操作系統(tǒng)上,將路徑不加修改地返回。 如果 path 的類型不是
str或bytes(直接或間接地通過os.PathLike接口) 則會引發(fā)TypeError。在 3.6 版更改: 接受一個 path-like object。
-
os.path.normpath(path)? 通過折疊多余的分隔符和對上級目錄的引用來標(biāo)準(zhǔn)化路徑名,所以
A//B、A/B/、A/./B和A/foo/../B都會轉(zhuǎn)換成A/B。這個字符串操作可能會改變帶有符號鏈接的路徑的含義。在 Windows 上,本方法將正斜杠轉(zhuǎn)換為反斜杠。要規(guī)范大小寫,請使用normcase()。在 3.6 版更改: 接受一個 path-like object。
-
os.path.realpath(path)? 返回指定文件的規(guī)范路徑,消除路徑中存在的任何符號鏈接(如果操作系統(tǒng)支持)。
在 3.6 版更改: 接受一個 path-like object。
-
os.path.relpath(path, start=os.curdir)? 返回從當(dāng)前目錄或 start 目錄(可選)到達(dá) path 之間要經(jīng)過的相對路徑。這僅僅是對路徑的計(jì)算,不會訪問文件系統(tǒng)來確認(rèn) path 或 start 的存在性或?qū)傩浴?/p>
開始 默認(rèn)為
os.curdir可用性: Unix, Windows。
在 3.6 版更改: 接受一個 path-like object。
-
os.path.samefile(path1, path2)? 如果兩個路徑都指向相同的文件或目錄,則返回
True。這由設(shè)備號和 inode 號確定,在任一路徑上調(diào)用os.stat()?失敗則拋出異常。可用性: Unix, Windows。
在 3.2 版更改: 添加了Windows?支持
在 3.4 版更改: Windows現(xiàn)在使用與其他所有平臺相同的實(shí)現(xiàn)。
在 3.6 版更改: 接受一個 path-like object。
-
os.path.sameopenfile(fp1, fp2)? 如果文件描述符 fp1 和 fp2 指向相同文件,則返回
True。可用性: Unix, Windows。
在 3.2 版更改: 添加了Windows?支持
在 3.6 版更改: 接受一個 path-like object。
-
os.path.samestat(stat1, stat2)? 如果 stat 元組 stat1 和 stat2 指向相同文件,則返回
True。這些 stat 元組可能是由os.fstat()、os.lstat()或os.stat()返回的。本函數(shù)實(shí)現(xiàn)了samefile()和sameopenfile()底層所使用的比較過程。可用性: Unix, Windows。
在 3.4 版更改: 添加了Windows?支持
在 3.6 版更改: 接受一個 path-like object。
-
os.path.split(path)? 將路徑 path 拆分為一對,即
(head, tail),其中,tail 是路徑的最后一部分,而 head 里是除最后部分外的所有內(nèi)容。tail 部分不會包含斜杠,如果 path 以斜杠結(jié)尾,則 tail 將為空。如果 path 中沒有斜杠,head 將為空。如果 path 為空,則 head 和 tail 均為空。head 末尾的斜杠會被去掉,除非它是根目錄(即它僅包含一個或多個斜杠)。在所有情況下,join(head, tail)指向的位置都與 path 相同(但字符串可能不同)。另請參見函數(shù)dirname()和basename()。在 3.6 版更改: 接受一個 path-like object。
-
os.path.splitdrive(path)? 將路徑 path 拆分為一對,即
(drive, tail),其中 drive 是掛載點(diǎn)或空字符串。在沒有驅(qū)動器概念的系統(tǒng)上,drive 將始終為空字符串。在所有情況下,drive + tail都與 path 相同。在 Windows 上,本方法將路徑拆分為驅(qū)動器/UNC 根節(jié)點(diǎn)和相對路徑。
如果路徑 path 包含盤符,則 drive 將包含冒號及冒號前面的所有內(nèi)容。例如
splitdrive("c:/dir")返回("c:", "/dir")。如果 path 是一個 UNC 路徑,則 drive 將包含主機(jī)名和共享點(diǎn),但不包括第四個分隔符。例如
splitdrive("//host/computer/dir")返回("//host/computer", "/dir")。在 3.6 版更改: 接受一個 path-like object。
-
os.path.splitext(path)? 將路徑 path 拆分為一對,即
(root, ext),使root + ext == path,其中 ext 為空或以英文句點(diǎn)開頭,且最多包含一個句點(diǎn)。路徑前的句點(diǎn)將被忽略,例如splitext('.cshrc')返回('.cshrc', '')。在 3.6 版更改: 接受一個 path-like object。
-
os.path.supports_unicode_filenames? 如果(在文件系統(tǒng)限制下)允許將任意 Unicode 字符串用作文件名,則為
True。
