python模塊之os.path

os.path.abspath(path)

返回path的絕對路徑名node

>>> os.path.abspath(".")
'C:\\Users\\admin\\Desktop\\PycharmProjects\\python_demo'

os.path.basename(path)

返回文件名,等同於調用os.path.split(path)返回值的第二個元素。python

>>> os.path.basename("/usr/bin/")
''
>>> os.path.basename("/usr/bin")
'bin'

python的basename和Unix shell的basename指令是有區別的:mysql

[root@localhost ~]# basename "/usr/bin"
bin
[root@localhost ~]# basename "/usr/bin/"
bin

os.path.commonpath(paths)

返回序列參數paths中最長的公共子路徑。若是paths爲空,或者同時包含絕對路徑和相對路徑,拋出ValueError異常。
os.path.commonprefix(list)不一樣,此函數的返回值必定是一個有效路徑。git

>>> os.path.commonpath(["/home/admin", "/home/admin/.ssh"])
'/home/admin'
>>> os.path.commonpath(["/home/admin1", "/home/admin2"])
'/home'

os.path.commonprefix(list)

返回list中全部路徑的最大長度的公共路徑前綴,若是list爲空返回空字符串。其返回值多是一個無效路徑。sql

>>> os.path.commonprefix([".", "/root"])
''
>>> os.path.commonprefix(["/home/admin1", "/home/admin2"])
'/home/admin'

os.path.dirname(path)

返回目錄名,等同於調用os.path.split(path)返回值的第一個元素。shell

>>> 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。windows

os.path.lexists(path)

判斷path是否存在。若是path是一個已存在的路徑,返回True。
若是path是一個受到破壞的軟連接(原始文件/文件夾被刪除),返回True。centos

os.path.expanduser(path)

返回把path中包含的"~"和"~user"轉換成用戶目錄後的路徑。app

Unix平臺:
對於path中的~,若是設置了環境變量HOME,使用HOME的值替換;不然使用當前用戶的用戶主目錄替換;
對於path中的~user,直接使用user的用戶主目錄替換ssh

>>> os.path.expanduser("~/local/mysql")
'/root/local/mysql'
>>> os.path.expanduser("~admin/local/mysql")
'/home/admin/local/mysql'

Windows平臺:
對於path中的~,使用環境變量HOMEUSERPROFILE的值,或HOMEPATHHOMEDRIVE的值的組合替換;
對於path中的~user,將替換"~"的路徑的最後一個目錄組件剝離,使用user替換

# 查看環境變量
(python) D:\>echo %HOME%
%HOME%

(python) D:\>echo %USERPROFILE%
C:\Users\admin

(python) D:\>echo %HOMEPATH%
\Users\admin

(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.lstatos.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字符串做爲文件名(在文件系統強加的限制內)

相關文章
相關標籤/搜索