Python Path使用教學 - 取代os.path

這篇文章會介紹 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訂閱本站唷

參考資料:

  1. python官方網站
  2. Python pathlib 教學:檔案路徑操作超簡單,不再煩惱前斜線或後斜線! 
  3. (python)使用pathlib替代os.path(轉錄) 

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。