Python pathlib模組使用方法及例項解析
pathlib 模組中包含的是一些類,它們的繼承關係如圖 1 所示。
圖 1 pathlib模組中類的組織結構
圖 1 中,箭頭連線的是有繼承關係的兩個類,以 PurePosixPath 和 PurePath 類為例,PurePosizPath 繼承自 PurePath,即前者是後者的子類。
pathlib 模組的操作物件是各種作業系統中使用的路徑(例如指定檔案位置的路徑,包括絕對路徑和相對路徑)。這裡簡單介紹一下圖 1 中包含的幾個類的具體功能:
- PurePath 類會將路徑看做是一個普通的字串,它可以實現將多個指定的字串拼接成適用於當前作業系統的路徑格式,同時還可以判斷任意兩個路徑是否相等。注意,使用 PurePath 操作的路徑,它並不會關心該路徑是否真實有效。
- PurePosixPath 和 PureWindowsPath 是 PurePath 的子類,前者用於操作 UNIX(包括 Mac OS X)風格的路徑,後者用於操作 Windows 風格的路徑。
- Path 類和以上 3 個類不同,它操作的路徑一定是真實有效的。Path 類提供了判斷路徑是否真實存在的方法。
- PosixPath 和 WindowPath 是 Path 的子類,分別用於操作 Unix(Mac OS X)風格的路徑和 Windows 風格的路徑。
注意,UNIX 作業系統和 Windows 作業系統上,路徑的格式是完全不同的,主要區別在於根路徑和路徑分隔符,UNIX 系統的根路徑是斜槓(/),而 Windows 系統的根路徑是碟符(C:);UNIX 系統路徑使用的分隔符是斜槓(/),而 Windows 使用的是反斜槓(\)。
PurePath 類的用法
PurePath 類(以及 PurePosixPath 類和 PureWindowsPath 類)都提供了大量的構造方法、例項方法以及類例項屬性,供我們使用。
PurePath類構造方法
需要注意的是,在使用 PurePath 類時,考慮到作業系統的不同,如果在 UNIX 或 Mac OS X 系統上使用 PurePath 建立物件,該類的構造方法實際返回的是 PurePosixPath 物件;反之,如果在 Windows 系統上使用 PurePath 建立物件,該類的構造方法返回的是 PureWindowsPath 物件。
當然,我們完全可以直接使用 PurePosixPath 類或者 PureWindowsPath 類建立指定作業系統使用的類物件。
例如,在 Windows 系統上執行如下語句:
from pathlib import *
# 建立PurePath,實際上使用PureWindowsPath
path = PurePath('my_file.txt')
print(type(path))
程式執行結果為:
<class 'pathlib.PureWindowsPath'>
顯然,在 Windows 作業系統上,使用 PurePath 類建構函式建立的是 PureWindowsPath 類物件。
讀者可自行嘗試在 UNIX 或者 Mac OS X 系統上執行該程式。
除此之外,PurePath 在建立物件時,也支援傳入多個路徑字串,它們會被拼接成一個路徑格式的字串。例如:
from pathlib import *
# 建立PurePath,實際上使用PureWindowsPath
path = PurePath('http:','c.biancheng.net','python')
print(path)
程式執行結果為:
http:\c.biancheng.net\python
可以看到,由於本機為 Windows 系統,因此這裡輸出的是適用於 Windows 平臺的路徑。如果想在 Windows 系統上輸出 UNIX 風格的路徑字串,就需要使用 PurePosixPath 類。例如:
from pathlib import *
path = PurePosixPath('http:','python')
print(path)
程式執行結果為:
http:/c.biancheng.net/python
值的一提的是,如果在使用 PurePath 類構造方法時,不傳入任何引數,則等同於傳入點‘.'(表示當前路徑)作為引數。例如:
from pathlib import *
path = PurePath()
print(path)
path = PurePath('.')
print(path)
程式執行結果為:
.
.
另外,如果傳入 PurePath 構造方法中的多個引數中,包含多個根路徑,則只會有最後一個根路徑及後面的子路徑生效。例如:
from pathlib import *
path = PurePath('C://','D://','my_file.txt')
print(path)
程式執行結果為:
D:\my_file.txt
注意,對於 Windows 風格的路徑,只有碟符(如 C、D等)才能算根路徑。
需要注意的是,如果傳給 PurePath 構造方法的引數中包含有多餘的斜槓或者點( . ,表示當前路徑),會直接被忽略( .. 不會被忽略)。舉個例子:
from pathlib import *
path = PurePath('C://./my_file.txt')
print(path)
程式執行結果為:
C:\my_file.txt
PurePath 類還過載各種比較運算子,多餘同種風格的路徑字串來說,可以判斷是否相等,也可以比較大小(實際上就是比較字串的大小);對於不同種風格的路徑字串之間,只能判斷是否相等(顯然,不可能相等),但不能比較大小。
舉個例子:
from pathlib import *
# Unix風格的路徑區分大小寫
print(PurePosixPath('C://my_file.txt') == PurePosixPath('c://my_file.txt'))
# Windows風格的路徑不區分大小寫
print(PureWindowsPath('C://my_file.txt') == PureWindowsPath('c://my_file.txt'))
程式執行結果為:
False
True
比較特殊的是,PurePath 類物件支援直接使用斜槓(/)作為多個字串之間的連線符,例如:
from pathlib import *
path = PurePosixPath('C://')
print(path / 'my_file.txt')
程式執行結果為:
C:/my_file.txt
通過以上方式構建的路徑,其本質上就是字串,因此我們完全可以使用 str() 將 PurePath 物件轉換成字串。例如:
from pathlib import *
# Unix風格的路徑區分大小寫
path = PurePosixPath('C://','my_file.txt')
print(str(path))
程式執行結果為:
C:/my_file.txt
PurePath類例項屬性和例項方法
表 1 中羅列出了常用的以下 PurePath 類例項方法和屬性。由於從本質上講,PurePath 的操作物件是字串,因此表 1 中的這些例項屬性和例項方法,實質也是對字串進行操作。
表 1 PurePath 類屬性和方法
類例項屬性和例項方法名 | 功能描述 |
---|---|
PurePath.parts | 返回路徑字串中所包含的各部分。 |
PurePath.drive | 返回路徑字串中的驅動器碟符。 |
PurePath.root | 返回路徑字串中的根路徑。 |
PurePath.anchor | 返回路徑字串中的碟符和根路徑。 |
PurePath.parents | 返回當前路徑的全部父路徑。 |
PurPath.parent | 返回當前路徑的上一級路徑,相當於 parents[0] 的返回值。 |
PurePath.name | 返回當前路徑中的檔名。 |
PurePath.suffixes | 返回當前路徑中的檔案所有後綴名。 |
PurePath.suffix | 返回當前路徑中的檔案字尾名。相當於 suffixes 屬性返回的列表的最後一個元素。 |
PurePath.stem | 返回當前路徑中的主檔名。 |
PurePath.as_posix() | 將當前路徑轉換成 UNIX 風格的路徑。 |
PurePath.as_uri() | 將當前路徑轉換成 URL。只有絕對路徑才能轉換,否則將會引發 ValueError。 |
PurePath.is_absolute() | 判斷當前路徑是否為絕對路徑。 |
PurePath.joinpath(*other) | 將多個路徑連線在一起,作用類似於前面介紹的斜槓(/)連線符。 |
PurePath.match(pattern) | 判斷當前路徑是否匹配指定萬用字元。 |
PurePath.relative_to(*other) | 獲取當前路徑中去除基準路徑之後的結果。 |
PurePath.with_name(name) | 將當前路徑中的檔名替換成新檔名。如果當前路徑中沒有檔名,則會引發 ValueError。 |
PurePath.with_suffix(suffix) | 將當前路徑中的檔案字尾名替換成新的字尾名。如果當前路徑中沒有後綴名,則會新增新的字尾名。 |
對於表 1 中的這些例項屬性和例項方法的用法,這裡不再舉例演示,有興趣的讀者可自行嘗試它們的功能。
Path類的功能和用法
和 PurPath 類相比,Path 類的最大不同,就是支援對路徑的真實性進行判斷。
從圖 1 可以輕易看出,Path 是 PurePath 的子類,因此 Path 類除了支援 PurePath 提供的各種建構函式、例項屬性以及例項方法之外,還提供甄別路徑字串有效性的方法,甚至還可以判斷該路徑對應的是檔案還是資料夾,如果是檔案,還支援對檔案進行讀寫等操作。
和 PurePath 一樣,Path 同樣有 2 個子類,分別為 PosixPath(表示 UNIX 風格的路徑)和 WindowsPath(表示 Windows 風格的路徑)。
由於文章篇幅有限,Path 類屬性和方法眾多,因此這裡不再一一進行講解,感興趣的讀者可通過官方手冊https://docs.python.org/3/library/pathlib.html 進行查閱。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。