專項練習 · 9 分鐘閱讀

Python pathlib 練習:路徑、檔名與文字檔

路徑不只是一個字串。它有父目錄、檔名、後綴和平臺相關的分隔符。pathlib 給這些概念起了名字,讓程式碼可以表達真實意圖,而不是用加號拼字串。

用斜槓運算子拼接

Path('data') / 'scores.csv' 會建立一個新路徑。這裡的斜槓被重載為拼接,不是除法。每個組成部分仍然清楚,具體分隔符由 pathlib 根據目前系統選擇。

from pathlib import Path
path = Path("data") / "scores.csv"
print(path.as_posix())
print(path.name)

由各部分建構的路徑

讀取路徑各部分,而不是手動 split

name、stem、suffix 和 parent 覆蓋了大多數檔名問題。stem 只去掉最後一個後綴,所以 archive.tar.gz 的 stem 是 archive.tar,suffix 是 .gz。這種行為可預測,也避免自己解析字串。

from pathlib import Path
path = Path("reports/2026-summary.txt")
print(path.stem)
print(path.suffix)
print(path.parent.as_posix())

實用的路徑屬性

讀寫 UTF-8 文字

write_text 會覆蓋檔案,read_text 回傳檔案內容。顯式指定 UTF-8,檔案位元組就不會依賴作業系統的預設編碼。臨時檔案可以用 unlink 刪除。

from pathlib import Path
path = Path("pypractice-guide-note.txt")
path.write_text("hello\n", encoding="utf-8")
print(path.read_text(encoding="utf-8").strip())
path.unlink()

一次完整的小檔案往返

讀取前先檢查

exists、is_file 和 is_dir 回答的是不同問題。路徑存在,也可能是一個目錄,所以 read_text 前應該用 is_file。檢查結果可能過期,因此也要處理真正的讀取錯誤。

from pathlib import Path
path = Path("pypractice-guide-note.txt")
print(path.exists())
print(path.is_file())

問具體的問題

需要可移植輸出時用 as_posix

str(path) 使用宿主系統的分隔符,在 Windows 上是反斜槓。輸出必須到處一致時,呼叫 as_posix()。把路徑交還給作業系統時,則使用原生形式。

from pathlib import Path
print((Path("data") / "scores.csv").as_posix())

穩定的正斜槓

你的練習清單

常見問題

Windows 上也有 pathlib 嗎?

有。pathlib 是標準函式庫的一部分,會根據作業系統選擇正確的分隔符。

write_text 會建立父目錄嗎?

不會。父目錄必須已經存在;需要時先建立。

應該把路徑儲存成字串嗎?

程式內部使用 Path 物件。只有 API 明確要求字串時,才在邊界處轉換。

練習 pathlib

12 道題,覆蓋路徑拼接、後綴、父目錄、檔案檢查和 UTF-8 文字。

打開練習

繼續閱讀: