關於panthlib模組
pathlib模組提供表示檔案系統路徑的類,其語義適用於不同的作業系統。路徑類被分為提供純計算操作而沒有 I/O 的純路徑,以及從純路徑繼承而來但提供 I/O 操作的具體路徑。
以下是一個對映了 os
與 PurePath/Path
對應相同的函式的表。
?注意:儘管
os.path.relpath()
和PurePath.relative_to()
擁有相同的重疊的用例,但是它們語義相差很大,不能認為它們等價。
?Tips:os模組的寫法是函式式的,由內到外需要一層一層剝開,而pathlib模組是鏈式寫法,從左到右理解,相較於從內到外理解更加清晰。
基礎使用
列出子目錄
>>> from pathlib import Path # 匯入模組
>>> p = Path('.')
>>> [x for x in p.iterdir() if x.is_dir()]
[PosixPath('.pip'), PosixPath('.pki'), PosixPath('.ansible'), PosixPath('.ssh'), PosixPath('.cache')]
查詢路徑屬性
>>> p = Path('.')
>>> p.exists() # 判斷是否存在
True
>>> p.is_dir() # 判斷是否為資料夾
True
>>> p.is_file() # 判斷是否為檔案
False
>>> p.is_absolute() # 判斷是否為絕對路徑
False
>>> path = Path('/tmp/aaa.txt')
>>> path.name # 獲取檔名
'aaa.txt'
>>> path.stem # 獲取檔名,不帶字尾
'aaa'
>>> path.suffix # 獲取檔案字尾
'.txt'
>>> path.parent # 獲取上級目錄
PosixPath('/tmp')
>>> path.root # 獲取根路徑
'/'
>>> path.parts # 將路徑分割成元祖
('/', 'tmp', 'aaa.txt')
>>> path.stat() # 獲取檔案資訊
os.stat_result(st_mode=33188, st_ino=134896383, st_dev=64768, st_nlink=1, st_uid=0, st_gid=0, st_size=4, st_atime=1645078071, st_mtime=1645078071, st_ctime=1645078071)
>>> path.resolve() # 獲取絕對路徑
PosixPath('/tmp/aaa.txt')
>>> path.cwd() # 獲取當前路徑
PosixPath('/tmp')
>>> path.home() # 獲取家目錄
PosixPath('/root')
檔案修改
當target
是string
時,重新命名檔案或資料夾;當target
是Path
時,重新命名並移動檔案或資料夾。
path.rename(target)
重新命名當前檔案或資料夾,如果target
所指示的檔案或資料夾已存在,則覆蓋原檔案。
path.replace(target)
path為空資料夾的時候,刪除該資料夾
>>> path = Path('/tmp/aaa')
>>> path.exists()
True
>>> path.rmdir()
>>> path.exists()
False
刪除檔案或目錄,目錄非空觸發異常。
>>> path = Path('/tmp/bbb')
>>> path.unlink()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python3/lib/python3.8/pathlib.py", line 1324, in unlink
self._accessor.unlink(self)
IsADirectoryError: [Errno 21] Is a directory: '/tmp/bbb'
根據路徑建立資料夾,parents=True
時,會依次建立路徑中間缺少的資料夾。
>>> path = Path('/tmp/aaa/bbb/ccc')
>>> path.mkdir()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python3/lib/python3.8/pathlib.py", line 1287, in mkdir
self._accessor.mkdir(self, mode)
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/aaa/bbb/ccc'
>>> path.mkdir(parents=True)