比os.path更高階的路徑物件pathlib
pathlib中的Path類繼承自PurePath,對PurePath中的部分方法進行了過載,相比於os.path有更高的抽象級別
幾個特點
- 路徑連線便捷
- 正則匹配相關檔案,返回可迭代可開啟的檔案物件
示例1
from pathlib import Path
root = Path("../PycharmProject")
config_dir = root/Path("config")
# 等價於config_dir = os.path.join(root, 'config')
print(str(config_dir))
Output:
示例2
path1 = Path("/home/unv")
path2 = Path("/home/unv/project/src")
print(path2.relative_to(path1))
Output: PosixPath(“project/src”)
正則匹配相關檔案,並返回可迭代的檔案物件
config.files = config_dir.rglob("*.json")
返回: [ PosixPath(“/home/unv/data1.json”), PosixPath(“/home/unv/data2.json”)]
!可迭代
方法列表
(具體可看原始碼的細節)
基本用法:
Path.iterdir() #遍歷目錄的子目錄或者檔案
Path.is_dir() #判斷是否是目錄
Path.glob() #過濾目錄(返回生成器)
Path.resolve() #返回絕對路徑
# 拼接路徑(目錄中進行導航-官網說法)
Path.exists() #判斷路徑是否存在
Path.open() #開啟檔案(支援with)
Path.unlink() #刪除檔案或目錄(目錄非空觸發異常)
基本屬性:
Path.parts #分割路徑 類似os.path.split(), 不過返回元組
Path.drive #返回驅動器名稱
Path.root #返回路徑的根目錄
Path.anchor #自動判斷返回drive或root
Path.parents #返回所有上級目錄的列表
改變路徑:
Path.with_name() #更改路徑名稱, 更改最後一級路徑名
Path.with_suffix() #更改路徑字尾
#拼接路徑
Path.joinpath() #拼接路徑
Path.relative_to() #計算相對路徑
測試路徑:
Path.match() #測試路徑是否符合pattern
Path.is_dir() #是否是檔案
Path.is_absolute() #是否是絕對路徑
Path.is_reserved() #是否是預留路徑
Path.exists() #判斷路徑是否真實存在
其他方法:
Path.cwd() #返回當前目錄的路徑物件
Path.home() #返回當前使用者的home路徑物件
Path.stat() #返回路徑資訊, 同os.stat()
Path.chmod() #更改路徑許可權, 類似os.chmod()
Path.expanduser() #展開~返回完整路徑物件
Path.mkdir() #建立目錄
Path.rename() #重新命名路徑
Path.rglob() #遞迴遍歷所有子目錄的檔案