os.path.abspath(path)
返回path的絕對路徑名
>>> os.path.abspath(".")
`C:\Users\admin\Desktop\PycharmProjects\python_demo`
os.path.basename(path)
返回檔名,等同於呼叫os.path.split(path)
返回值的第二個元素。
>>> os.path.basename("/usr/bin/")
``
>>> os.path.basename("/usr/bin")
`bin`
python的basename和Unix shell的basename指令是有區別的:
[root@localhost ~]# basename "/usr/bin"
bin
[root@localhost ~]# basename "/usr/bin/"
bin
os.path.commonpath(paths)
返回序列引數paths中最長的公共子路徑。如果paths為空,或者同時包含絕對路徑和相對路徑,丟擲ValueError
異常。
與os.path.commonprefix(list)
不同,此函式的返回值一定是一個有效路徑。
>>> os.path.commonpath(["/home/admin", "/home/admin/.ssh"])
`/home/admin`
>>> os.path.commonpath(["/home/admin1", "/home/admin2"])
`/home`
os.path.commonprefix(list)
返回list中所有路徑的最大長度的公共路徑字首,如果list為空返回空字串。其返回值可能是一個無效路徑。
>>> os.path.commonprefix([".", "/root"])
``
>>> os.path.commonprefix(["/home/admin1", "/home/admin2"])
`/home/admin`
os.path.dirname(path)
返回目錄名,等同於呼叫os.path.split(path)
返回值的第一個元素。
>>> os.path.dirname("/usr/bin/")
`/usr/bin`
>>> os.path.dirname("/usr/bin")
`/usr`
os.path.exists(path)
判斷path是否存在。如果path是一個已存在的路徑或一個開啟的檔案描述符(int),返回True。
在某些平臺,即使path真實存在,但如果沒有針對path執行os.stat()
的許可權,仍有可能返回False。
如果path是一個受到破壞的軟連結(原始檔案/資料夾被刪除),返回False。
os.path.lexists(path)
判斷path是否存在。如果path是一個已存在的路徑,返回True。
如果path是一個受到破壞的軟連結(原始檔案/資料夾被刪除),返回True。
os.path.expanduser(path)
返回把path中包含的”~”和”~user”轉換成使用者目錄後的路徑。
Unix平臺:
對於path中的~
,如果設定了環境變數HOME
,使用HOME
的值替換;否則使用當前使用者的使用者主目錄替換;
對於path中的~user
,直接使用user的使用者主目錄替換
>>> os.path.expanduser("~/local/mysql")
`/root/local/mysql`
>>> os.path.expanduser("~admin/local/mysql")
`/home/admin/local/mysql`
Windows平臺:
對於path中的~
,使用環境變數HOME
或USERPROFILE
的值,或HOMEPATH
和HOMEDRIVE
的值的組合替換;
對於path中的~user
,將替換”~”的路徑的最後一個目錄元件剝離,使用user替換
# 檢視環境變數
(python) D:>echo %HOME%
%HOME%
(python) D:>echo %USERPROFILE%
C:Usersadmin
(python) D:>echo %HOMEPATH%
Usersadmin
(python) D:>echo %HOMEDRIVE%
C:
>>> os.path.expanduser("~\local")
`C:\Users\admin\local`
# 將C:\Users\admin中的admin替換為anyuser
>>> os.path.expanduser("~anyuser\local")
`C:\Users\anyuser\local`
如果擴充套件失敗或path未以”~”為字首,不做改動直接返回。
os.path.expandvars(path)
擴充套件path中的環境變數並返回。path中$NAME
和${NAME}
格式的子串將被對應的環境變數替換(不同平臺存在是否區分大小寫的問題)。格式錯誤或變數不存在,將直接返回。
在windows中還包括%NAME%
的形式。
os.path.getatime(path)
最後訪問時間。返回值是自epoch時間算起的浮點值,單位為秒。如果path不存在或無法訪問將丟擲異常。
>>> getatime("/root/demo.txt")
1545345643.4549878
os.path.getmtime(path)
最後修改時間。返回值是自epoch時間算起的浮點值,單位為秒。如果path不存在或無法訪問將丟擲異常。
os.path.getctime(path)
在Unix系統,表示最近一次修改後設資料的時間;在Windows系統,表示建立時間。返回值是自epoch時間算起的浮點值,單位為秒。如果path不存在或無法訪問將丟擲異常。
os.path.getsize(path)
以位元組為單位返回路徑大小。如果path不存在或無法訪問將丟擲異常。
如果path指向一個資料夾,返回值不代表該資料夾真實佔用的大小。
os.path.isabs(path)
判斷是否為絕對路徑。
os.path.isfile(path)
判斷是否為檔案。符號連結判定為True,受到破壞判定為False
[root@localhost ~]# ll
總用量 0
lrwxrwxrwx. 1 root root 8 12月 21 07:32 demo.link -> demo.txt
-rw-r--r--. 1 root root 0 12月 21 07:31 demo.txt
lrwxrwxrwx. 1 root root 10 12月 21 07:32 sample.link -> sample.txt # 原檔案被刪除導致軟連結受到破壞
>>> isfile("/root/demo.link")
True
>>> isfile("/root/sample.link")
False
os.path.isdir(path)
判斷是否為資料夾。符號連結判定為True,受到破壞判定為False
os.path.islink(path)
判斷是否為符號連結,即使是受到破壞的符號連結,也會返回True。
如果Python執行環境不支援符號連結,返回False。
os.path.ismount(path)
判斷是否為掛載點。
[root@localhost ~]# df -h
檔案系統 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root 18G 1.7G 16G 10% /
devtmpfs 480M 0 480M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 7.4M 485M 2% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/sda1 497M 157M 340M 32% /boot
tmpfs 99M 0 99M 0% /run/user/0
>>> ismount("/dev")
True
對於Windows系統,磁碟符根目錄及UNC路徑的共享目錄總是掛載點:
>>> ismount("c:/")
True
>>> ismount("//DESKTOP-BV17H6X/Users/")
True
os.path.join(path, *paths)
路徑拼接。
將path與paths中的非空路徑元件使用系統分隔符拼接。如果最後一個元件是空字串,返回值將以分隔符結尾:
>>> join("/root", "a", "b", "", "c")
`/root/a/b/c`
>>> join("/root", "a", "b", "c", "")
`/root/a/b/c/`
如果paths中任意一個元件是絕對路徑,將直接以該元件開始進行拼接:
>>> join("/root", "a", "/b", "c")
`/b/c`
在Windows中,如果paths中出現不含磁碟符的絕對路徑,不會重置磁碟符:
>>> join("c:/root", "/foo")
`c:/foo`
如果paths中出現含磁碟符的,直接從該路徑開始進行拼接:
>>> join("c:/root", "e:/root", "/foo")
`e:/foo`
每個磁碟符有一個當前工作目錄,下例表示相對於該磁碟當前工作目錄的路徑foo(e:foo
而非e:\foo
):
>>> os.path.abspath(join("e:", "foo"))
`E:\git_project\foo`
os.path.normcase(path)
規範路徑名大小寫。在Unix和Mac OS X系統,直接返回path;在大小寫不敏感的系統(如Windows),會將path轉換為小寫字母。此外Windows還會將/
轉換為\
。
os.path.normpath(path)
規範路徑名中的多餘分隔符以及上級引用,如A//B
, A/B/
, A/./B
and A/foo/../B
將全部轉換為A/B
。Windows系統還會將/
轉換為\
。
os.path.realpath(path)
將包含符號連結的path轉換為真實路徑名稱。
os.path.relpath(path, start=os.curdir)
返回相對於當前工作目錄或指定的start目錄的相對路徑。
os.path.samefile(path1, path2)
判斷path1和path2是否指向同一個檔案或目錄,取決於裝置號和i-node。如果呼叫os.stat()
失敗將丟擲異常。
os.path.sameopenfile(fp1, fp2)
判斷檔案描述符fp1和fp2是否指向同一個檔案或目錄。
os.path.samestat(stat1, stat2)
判斷狀態元組stat1和stat2是否指向同一個檔案或目錄,引數可能是os.fstat()
、os.lstat
或os.stat()
的返回值。
os.path.split(path)
將path拆分為(head, tail)
的元組形式。
tail部分總是不包含斜槓,如果path以斜槓結尾,tail將為空字串;尾部的斜槓也會從head中去除,除非path是根路徑:
>>> split("/home/admin/.ssh/")
(`/home/admin/.ssh`, ``)
>>> split("/")
(`/`, ``)
如果path不包含斜槓,head部分將為空字串:
>>> split("home")
(``, `home`)
如果path為空字串,head和tail都將為空:
>>> split("")
(``, ``)
os.path.splitdrive(path)
將path拆分為(drive, tail)
的元組形式。
在不使用磁碟符的系統,drive總是為空字串;在Windows系統,會將path分割為UNC共享點/磁碟驅動,及其相對路徑。
# 包含磁碟符的路徑
>>> splitdrive("c:/dir")
(`c:`, `/dir`)
# UNC路徑,分割後的drive包含主機名和共享點(到第四個分隔符但不包括第四個)
>>> splitdrive("//servername/sharename/directory/filename")
(`//servername/sharename`, `/directory/filename`)
os.path.splitext(path)
將path拆分為(root, ext)
的元組形式。
ext為空字串或者以.
打頭且只包含1個.
的字串:
>>> splitext("/home/admin/.ssh/")
(`/home/admin/.ssh/`, ``)
>>> splitext("/home/admin/.ssh/id_rsa.ppk")
(`/home/admin/.ssh/id_rsa`, `.ppk`)
# 如果path以`.`打頭,ext將為空字串
>>> splitext(`.cshrc`)
(`.cshrc`, ``)
os.path.supports_unicode_filenames
判斷是否能使用任意Unicode字串作為檔名(在檔案系統強加的限制內)