Python pathlib 物件導向路徑處理
在 Python 3.4 之後,官方引入了 pathlib 模組。它將檔案路徑封裝成一個「物件」,讓我們能以更直觀、可讀性更高的方式來處理路徑,逐漸取代了傳統的 os.path。
為何選擇 pathlib?
比起 os.path 將路徑視為「字串」處理,pathlib 將路徑視為「物件」:
- 可讀性更好:方法與屬性語意化。
- 操作更直觀:可以使用
/運算子直接組合路徑。 - 跨平台一致性:自動處理不同作業系統的分隔符號。
基本用法
建立路徑物件
from pathlib import Path
# 建立目前目錄的路徑物件
p = Path('.')
# 指定特定路徑
data_path = Path('data/users.csv')
# 取得家目錄 (Home Directory)
home = Path.home()
# 取得目前檔案所在的絕對路徑
current_file = Path(__file__).resolve()
組合路徑
不需要再使用 os.path.join(),直接像寫路徑一樣使用 /:
from pathlib import Path
base = Path('downloads')
file = base / 'images' / 'sunset.jpg'
print(file)
# macOS/Linux: downloads/images/sunset.jpg
# Windows: downloads\images\sunset.jpg
路徑屬性與操作
提取資訊
from pathlib import Path
path = Path('project/src/main.py')
print(path.name) # main.py (檔案全名)
print(path.stem) # main (檔案主名,不含副檔名)
print(path.suffix) # .py (副檔名)
print(path.parent) # project/src (父目錄)
print(path.parents[1]) # project (上上層目錄)
檢查路徑狀態
path = Path('config.json')
if path.exists():
print("路徑存在")
if path.is_file():
print("這是一個檔案")
elif path.is_dir():
print("這是一個目錄")
檔案與目錄操作
建立與刪除
from pathlib import Path
folder = Path('logs/2024')
# 建立目錄 (parents=True 相當於 os.makedirs)
folder.mkdir(parents=True, exist_ok=True)
# 建立空檔案
file = folder / 'app.log'
file.touch()
# 刪除檔案
# file.unlink()
# 刪除目錄 (必須為空)
# folder.rmdir()
遍歷目錄 (Glob)
pathlib 內建強大的 glob 功能,用於搜尋符合模式的檔案:
from pathlib import Path
p = Path('downloads')
# 列出所有 .txt 檔案
for txt_file in p.glob('*.txt'):
print(txt_file.name)
# 遞迴搜尋所有子目錄下的 .jpg 檔案
for img in p.rglob('*.jpg'):
print(img)
讀寫檔案 (捷徑方法)
對於簡單的讀寫,pathlib 提供了更便利的方法,甚至不需要手動 open():
from pathlib import Path
p = Path('hello.txt')
# 直接寫入文字 (預設會覆蓋)
p.write_text('Hello World!', encoding='utf-8')
# 直接讀取全部內容
content = p.read_text(encoding='utf-8')
print(content)
總結
pathlib 是現代 Python 處理路徑的首選:
- 使用
Path物件代替路徑字串。 - 使用
/運算子取代os.path.join。 - 使用
read_text()或write_text()快速處理小型檔案。
雖然在某些極端效能要求的場景或與舊版 API 對接時仍會見到 os.path,但在一般開發中,pathlib 能讓你的程式碼更加優雅且易於維護。