這篇文章會介紹 python path使用教學 ,還記得剛學Python時,都是透過os.path進行檔案相關的操作,但python3.4開始,內建了pathlib新模組,將各種操作都放進了Path類別內,使用物件導向的設計表示檔案系統路徑,並處理了Windows跟Ubuntu不同系統斜線與反斜線的問題。這篇文章會介紹 python pathlib 基本用法及進階用法。
1. pathlib 基本用法
指定路徑、找絕對路徑、路徑轉成字串 (跨作業系統)
# import Path這個類別
from pathlib import Path
# 建立Path實例,參數為路徑,不論在哪個作業系統輸入 /
path = Path('test/test.py')
# 印出path,會自動轉成str,會根據系統印出 / 或反斜線 \
print(path)
# test\test.py
# 印出 path的表示,因在Windows上執行,顯示其為WindowsPath類別
print(repr(path))
# WindowsPath('test/test.py')
# 使用resolve方法,列出絕對路徑
# 在windows中test資料夾必須存在,否則需要使用absolute()才會有絕對路徑
path.resolve()
# WindowsPath('C:/Users/JayHome/Desktop/test/test.py')
取得檔名、取得副檔名、修改檔名附檔名
# 取得路徑中,最後的檔名
path.name
# test.py
# 取得副檔名,如果路徑是資料夾則副檔名會是空字串
path.suffix
# .py
# 修改檔名,會產生新的Path實例
path.with_name('test2.py')
# WindowsPath('test/test2.py')
# 修改複檔名,會產生新的Path實例
path.with_suffix('.ppy')
# WindowsPath('test/test.ppy')
拼接路徑 joinpath
# 使用joinpath拼接路徑,或是直接對Path類別使用 / 運算元
Path('Desktop').joinpath('directory', 'file.py')
Path('Desktop') / 'directory' / 'file.py'
# WindowsPath('Desktop/directory/file.py')
取得父資料夾路徑 parent、parents、home
# 使用parent方法顯示上一層的路徑
path = Path('/dir1/dir2/file.py')
path.parent
# WindowsPath('/dir1/dir2')
# 使用parents方法取得上層的所有路徑
list(path.parents)
# [WindowsPath('/dir1/dir2'), WindowsPath('/dir1'), WindowsPath('/')]
# 使用home方法取得系統家目錄
Path.home()
# WindowsPath('C:/Users/JayHome')
2. pathlib 進階用法
檔案資料夾是否存在
# 使用exists方法,判斷路徑是否存在
path = Path('test/test.py')
path.exists()
# False
建立資料夾與檔案,並寫入及讀取內容
# 建立test資料夾
path.parent.mkdir(parents=True, exist_ok=True)
# 建立test.py檔案
path.touch()
# 寫入文字至test.py, 寫入Bytes可改用write_bytes方法
path.write_text('print("hello world!")')
# 讀取文字內容
path.read_text()
列出檔案資訊
# 使用stat列出檔案資訊
path.stat()
# os.stat_result(st_mode=33206, st_ino=27584547718253664, st_dev=274192415,
# st_nlink=1, st_uid=0, st_gid=0, st_size=21,
# st_atime=1678666413, st_mtime=1678666411, st_ctime=1678666410)
再次檢查其路徑是否存在,同時檢查其是否為檔案、資料夾
# 使用is_dir, is_file方法判斷路徑是否為資料夾, 檔案
print(path.is_dir(), path.is_file())
# False, True
print(path.parent.is_dir(), path.parent.is_file())
# True, False
刪除檔案與刪除資料夾
# 刪除檔案
path.unlink()
# 刪除資料夾
path.parent.rmdir()
iter子檔案and 目錄
# 使用iterdir方法列出路徑下的資料夾與檔案
p = Path('docs')
for child in p.iterdir():
print(child)
# PosixPath('docs/conf.py')
# PosixPath('docs/_templates')
# PosixPath('docs/make.bat')
# PosixPath('docs/index.rst')
# PosixPath('docs/_build')
# PosixPath('docs/_static')
# PosixPath('docs/Makefile')
# 查詢該路徑當下所有的py檔
sorted(Path('.').glob('*.py'))
# [PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
# 查詢該路徑下一層的py檔
sorted(Path('.').glob('*/*.py'))
# [PosixPath('docs/conf.py')]
# 查詢該路徑以及往下N層的py檔,也就是遞迴式的查詢所有py檔
sorted(Path('.').glob('**/*.py'))
# [PosixPath('build/lib/pathlib.py'),
# PosixPath('docs/conf.py'),
# PosixPath('pathlib.py'),
# PosixPath('setup.py'),
# PosixPath('test_pathlib.py')]
3. 結論
謝謝各位讀者看到這裡,這篇文章介紹了pathlib套件中,Path類別的相關用法,Path能夠代替os.path,並用更直覺得方式操作檔案,讓你的Code可以更簡潔。
若你有任何覺得好用的套件或是任何建議,也歡迎您在下方留言告訴我以及分享給其他人唷
若你覺得文章對你很有幫助,歡迎在網頁右方填入你的email訂閱本站唷
參考資料: