新聞中心
os.path —- 常用路徑操作
源代碼: Lib/posixpath.py (用于 POSIX) 和 Lib/ntpath.py (用于 Windows)。

我們提供的服務(wù)有:網(wǎng)站制作、網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、肅北ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的肅北網(wǎng)站制作公司
此模塊實(shí)現(xiàn)了一些有用的路徑名稱相關(guān)函數(shù)。 要讀取或?qū)懭胛募?qǐng)參見 open(),對(duì)于訪問文件系統(tǒng)請(qǐng)參閱 os 模塊。 傳給 path 形參的可以是字符串、字節(jié)串或者任何實(shí)現(xiàn)了 os.PathLike 協(xié)議的對(duì)象。
Unlike a Unix shell, python does not do any automatic path expansions. Functions such as expanduser() and expandvars() can be invoked explicitly when an application desires shell-like path expansion. (See also the glob module.)
參見
pathlib 模塊提供高級(jí)路徑對(duì)象。
備注
所有這些函數(shù)都僅接受字節(jié)或字符串對(duì)象作為其參數(shù)。如果返回路徑或文件名,則結(jié)果是相同類型的對(duì)象。
備注
由于不同的操作系統(tǒng)具有不同的路徑名稱約定,因此標(biāo)準(zhǔn)庫中有此模塊的幾個(gè)版本。os.path 模塊始終是適合 Python 運(yùn)行的操作系統(tǒng)的路徑模塊,因此可用于本地路徑。但是,如果操作的路徑 總是 以一種不同的格式顯示,那么也可以分別導(dǎo)入和使用各個(gè)模塊。它們都具有相同的接口:
-
posixpath用于Unix 樣式的路徑 -
ntpath用于 Windows 路徑
在 3.8 版更改: exists()、lexists()、isdir()、isfile()、islink() 和 ismount() 現(xiàn)在遇到系統(tǒng)層面上不可表示的字符或字節(jié)的路徑時(shí),會(huì)返回 False,而不是拋出異常。
os.path.abspath(path)
返回路徑 path 的絕對(duì)路徑(標(biāo)準(zhǔn)化的)。在大多數(shù)平臺(tái)上,這等同于用 normpath(join(os.getcwd(), path)) 的方式調(diào)用 normpath() 函數(shù)。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.basename(path)
返回路徑 path 的基本名稱。這是將 path 傳入函數(shù) split() 之后,返回的一對(duì)值中的第二個(gè)元素。請(qǐng)注意,此函數(shù)的結(jié)果與Unix basename 程序不同。basename 在 '/foo/bar/' 上返回 'bar',而 basename() 函數(shù)返回一個(gè)空字符串 ('')。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.commonpath(paths)
接受包含多個(gè)路徑的序列 paths,返回 paths 的最長公共子路徑。如果 paths 同時(shí)包含絕對(duì)路徑和相對(duì)路徑,或 paths 在不同的驅(qū)動(dòng)器上,或 paths 為空,則拋出 ValueError 異常。與 commonprefix() 不同,本方法返回有效路徑。
可用性: Unix, Windows。
3.5 新版功能.
在 3.6 版更改: 接受一個(gè) 類路徑對(duì)象 序列。
os.path.commonprefix(list)
接受包含多個(gè)路徑的 列表,返回所有路徑的最長公共前綴(逐字符比較)。如果 列表 為空,則返回空字符串 ('')。
備注
此函數(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 版更改: 接受一個(gè) path-like object。
os.path.dirname(path)
返回路徑 path 的目錄名稱。這是將 path 傳入函數(shù) split() 之后,返回的一對(duì)值中的第一個(gè)元素。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.exists(path)
如果 path 指向一個(gè)已存在的路徑或已打開的文件描述符,返回 True。對(duì)于失效的符號(hào)鏈接,返回 False。在某些平臺(tái)上,如果使用 os.stat() 查詢到目標(biāo)文件沒有執(zhí)行權(quán)限,即使 path 確實(shí)存在,本函數(shù)也可能返回 False。
在 3.3 版更改: path 現(xiàn)在可以是一個(gè)整數(shù):如果該整數(shù)是一個(gè)已打開的文件描述符,返回 True,否則返回 False。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.lexists(path)
如果 path 指向一個(gè)已存在的路徑,返回 True。對(duì)于失效的符號(hào)鏈接,也返回 True。在缺失 os.lstat() 的平臺(tái)上等同于 exists()。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.expanduser(path)
在 Unix 和 Windows 上,將參數(shù)中開頭部分的 ~ 或 ~user 替換為當(dāng)前 用戶 的家目錄并返回。
在 Unix 上,開頭的 ~ 會(huì)被環(huán)境變量 HOME 代替,如果變量未設(shè)置,則通過內(nèi)置模塊 pwd 在 password 目錄中查找當(dāng)前用戶的主目錄。以 ~user 開頭則直接在 password 目錄中查找。
在 Windows 上,如果 USERPROFILE 已設(shè)置將會(huì)被使用,否則 HOMEPATH 和 HOMEDRIVE 將被組合起來使用。 初始的 ~user 會(huì)通過檢查當(dāng)前用戶的家目錄中匹配 USERNAME 的最后一部分目錄名并執(zhí)行替換來處理。
如果展開路徑失敗,或者路徑不是以波浪號(hào)開頭,則路徑將保持不變。
在 3.6 版更改: 接受一個(gè) path-like object。
在 3.8 版更改: Windows 不再使用 HOME。
os.path.expandvars(path)
輸入帶有環(huán)境變量的路徑作為參數(shù),返回展開變量以后的路徑。$name 或 ${name} 形式的子字符串被環(huán)境變量 name 的值替換。格式錯(cuò)誤的變量名稱和對(duì)不存在變量的引用保持不變。
在 Windows 上,除了 $name 和 ${name} 外,還可以展開 %name%。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.getatime(path)
返回 path 的最后訪問時(shí)間。返回值是一個(gè)浮點(diǎn)數(shù),為紀(jì)元秒數(shù)(參見 time 模塊)。如果該文件不存在或不可訪問,則拋出 OSError 異常。
os.path.getmtime(path)
返回 path 的最后修改時(shí)間。返回值是一個(gè)浮點(diǎn)數(shù),為紀(jì)元秒數(shù)(參見 time 模塊)。如果該文件不存在或不可訪問,則拋出 OSError 異常。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.getctime(path)
返回 path 在系統(tǒng)中的 ctime,在有些系統(tǒng)(比如 Unix)上,它是元數(shù)據(jù)的最后修改時(shí)間,其他系統(tǒng)(比如 Windows)上,它是 path 的創(chuàng)建時(shí)間。返回值是一個(gè)數(shù),為紀(jì)元秒數(shù)(參見 time 模塊)。如果該文件不存在或不可訪問,則拋出 OSError 異常。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.getsize(path)
返回 path 的大小,以字節(jié)為單位。如果該文件不存在或不可訪問,則拋出 OSError 異常。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.isabs(path)
如果 path 是一個(gè)絕對(duì)路徑,則返回 True。在 Unix 上,它就是以斜杠開頭,而在 Windows 上,它可以是去掉驅(qū)動(dòng)器號(hào)后以斜杠(或反斜杠)開頭。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.isfile(path)
如果 path 是 現(xiàn)有的 常規(guī)文件,則返回 True。本方法會(huì)跟蹤符號(hào)鏈接,因此,對(duì)于同一路徑,islink() 和 isfile() 都可能為 True。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.isdir(path)
如果 path 是 現(xiàn)有的 目錄,則返回 True。本方法會(huì)跟蹤符號(hào)鏈接,因此,對(duì)于同一路徑,islink() 和 isdir() 都可能為 True。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.islink(path)
如果 path 指向的 現(xiàn)有 目錄條目是一個(gè)符號(hào)鏈接,則返回 True。如果 Python 運(yùn)行時(shí)不支持符號(hào)鏈接,則總是返回 False。
在 3.6 版更改: 接受一個(gè) 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(這一檢測(cè)掛載點(diǎn)的方法適用于所有 Unix 和 POSIX 變體)。本方法不能可靠地檢測(cè)同一文件系統(tǒng)上的綁定掛載 (bind mount)。在 Windows 上,盤符和共享 UNC 始終是掛載點(diǎn),對(duì)于任何其他路徑,將調(diào)用 GetVolumePathName 來查看它是否與輸入的路徑不同。
3.4 新版功能: 支持在 Windows 上檢測(cè)非根掛載點(diǎn)。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.join(path, \paths*)
智能地拼接一個(gè)或多個(gè)路徑部分。 返回值是 path 和 \paths* 的所有成員的拼接,其中每個(gè)非空部分后面都緊跟一個(gè)目錄分隔符,最后一個(gè)部分除外,這意味著如果最后一個(gè)部分為空,則結(jié)果將以分隔符結(jié)尾。 如果某個(gè)部分為絕對(duì)路徑,則之前的所有部分會(huì)被丟棄并從絕對(duì)路徑部分開始繼續(xù)拼接。
在 Windows 上,遇到絕對(duì)路徑部分(例如 r'\foo')時(shí),不會(huì)重置盤符。如果某部分路徑包含盤符,則會(huì)丟棄所有先前的部分,并重置盤符。請(qǐng)注意,由于每個(gè)驅(qū)動(dòng)器都有一個(gè)“當(dāng)前目錄”,所以 os.path.join("c:", "foo") 表示驅(qū)動(dòng)器 C: 上當(dāng)前目錄的相對(duì)路徑 (c:foo),而不是 c:\foo。
在 3.6 版更改: 接受一個(gè) 類路徑對(duì)象 用于 path 和 paths 。
os.path.normcase(path)
規(guī)范路徑的大小寫。在 Windows 上,將路徑中的所有字符都轉(zhuǎn)換為小寫,并將正斜杠轉(zhuǎn)換為反斜杠。在其他操作系統(tǒng)上返回原路徑。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.normpath(path)
通過折疊多余的分隔符和對(duì)上級(jí)目錄的引用來標(biāo)準(zhǔn)化路徑名,所以
A//B、A/B/、A/./B和A/foo/../B都會(huì)轉(zhuǎn)換成A/B。這個(gè)字符串操作可能會(huì)改變帶有符號(hào)鏈接的路徑的含義。在 Windows 上,本方法將正斜杠轉(zhuǎn)換為反斜杠。要規(guī)范大小寫,請(qǐng)使用 normcase()。
備注
On POSIX systems, in accordance with IEEE Std 1003.1 2013 Edition; 4.13 Pathname Resolution, if a pathname begins with exactly two slashes, the first component following the leading characters may be interpreted in an implementation-defined manner, although more than two leading characters shall be treated as a single character.
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.realpath(path, **, strict=False*)
返回指定文件的規(guī)范路徑,消除路徑中存在的任何符號(hào)鏈接(如果操作系統(tǒng)支持)。
如果一個(gè)路徑不存在或是遇到了符號(hào)鏈接循環(huán),并且 strict 為 True,則會(huì)引發(fā) OSError。 如果 strict 為 False,則會(huì)盡可能地解析路徑并添加結(jié)果而不檢查路徑是否存在。
備注
這個(gè)函數(shù)會(huì)模擬操作系統(tǒng)生成規(guī)范路徑的過程,Windows 與 UNIX 的這個(gè)過程在處理鏈接和后續(xù)路徑組成部分的交互方式上有所差異。
操作系統(tǒng) API 會(huì)根據(jù)需要來規(guī)范化路徑,因此通常不需要調(diào)用此函數(shù)。
在 3.6 版更改: 接受一個(gè) path-like object。
在 3.8 版更改: 在 Windows 上現(xiàn)在可以正確解析符號(hào)鏈接和交接點(diǎn) (junction point)。
在 3.10 版更改: 增加了 strict 形參。
os.path.relpath(path, start=os.curdir)
返回從當(dāng)前目錄或可選的 start 目錄至 path 的相對(duì)文件路徑。 這只是一個(gè)路徑計(jì)算:不會(huì)訪問文件系統(tǒng)來確認(rèn) path 或 start 是否存在或其性質(zhì)。 在 Windows 上,當(dāng) path 和 start 位于不同驅(qū)動(dòng)器時(shí)將引發(fā) ValueError。
start 默認(rèn)為 os.curdir。
可用性: Unix, Windows。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.samefile(path1, path2)
如果兩個(gè)路徑都指向相同的文件或目錄,則返回 True。這由設(shè)備號(hào)和 inode 號(hào)確定,在任一路徑上調(diào)用 os.stat() 失敗則拋出異常。
可用性: Unix, Windows。
在 3.2 版更改: 添加了對(duì) Windows 的支持。
在 3.4 版更改: Windows現(xiàn)在使用與其他所有平臺(tái)相同的實(shí)現(xiàn)。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.sameopenfile(fp1, fp2)
如果文件描述符 fp1 和 fp2 指向相同文件,則返回 True。
可用性: Unix, Windows。
在 3.2 版更改: 添加了對(duì) Windows 的支持。
在 3.6 版更改: 接受一個(gè) 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 版更改: 添加了對(duì) Windows 的支持。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.split(path)
將路徑 path 拆分為一對(duì),即 (head, tail),其中,tail 是路徑的最后一部分,而 head 里是除最后部分外的所有內(nèi)容。tail 部分不會(huì)包含斜杠,如果 path 以斜杠結(jié)尾,則 tail 將為空。如果 path 中沒有斜杠,head 將為空。如果 path 為空,則 head 和 tail 均為空。head 末尾的斜杠會(huì)被去掉,除非它是根目錄(即它僅包含一個(gè)或多個(gè)斜杠)。在所有情況下,join(head, tail) 指向的位置都與 path 相同(但字符串可能不同)。另請(qǐng)參見函數(shù) dirname() 和 basename()。
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.splitdrive(path)
將路徑 path 拆分為一對(duì),即 (drive, tail),其中 drive 是掛載點(diǎn)或空字符串。在沒有驅(qū)動(dòng)器概念的系統(tǒng)上,drive 將始終為空字符串。在所有情況下,drive + tail 都與 path 相同。
在 Windows 上,本方法將路徑拆分為驅(qū)動(dòng)器/UNC 根節(jié)點(diǎn)和相對(duì)路徑。
如果路徑 path 包含盤符,則 drive 將包含冒號(hào)之前的所有內(nèi)容包括冒號(hào)本身:
>>> splitdrive("c:/dir")("c:", "/dir")
如果路徑 path 包含 UNC 路徑,則 drive 將包含主機(jī)名和 share,直至第四個(gè)分隔符但不包括該分隔符:
>>> splitdrive("http://host/computer/dir")("http://host/computer", "/dir")
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.splitext(path)
將路徑名稱 path 拆分為 (root, ext) 對(duì)使得 root + ext == path,并且擴(kuò)展名 ext 為空或以句點(diǎn)打頭并最多只包含一個(gè)句點(diǎn)。
如果路徑 path 不包含擴(kuò)展名,則 ext 將為 '':
>>> splitext('bar')('bar', '')
如果路徑 path 包含擴(kuò)展名,則 ext 將被設(shè)為該擴(kuò)展名,包括打頭的句點(diǎn)。 請(qǐng)注意在其之前的句點(diǎn)將被忽略:
>>> splitext('foo.bar.exe')('foo.bar', '.exe')>>> splitext('/foo/bar.exe')('/foo/bar', '.exe')
path 中最后一部分如果以點(diǎn)號(hào)開頭則會(huì)被視為 root 的一部分:
>>> splitext('.cshrc')('.cshrc', '')>>> splitext('/foo/....jpg')('/foo/....jpg', '')
在 3.6 版更改: 接受一個(gè) path-like object。
os.path.supports_unicode_filenames
如果(在文件系統(tǒng)限制下)允許將任意 Unicode 字符串用作文件名,則為 True。
本文名稱:創(chuàng)新互聯(lián)Python教程:os.path—-常用路徑操作
分享地址:http://m.fisionsoft.com.cn/article/dpdsjoi.html


咨詢
建站咨詢
