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())穩定的正斜槓
你的練習清單
- 用 / 建構路徑,不要用字串加法。
- 用 name、stem、suffix 和 parent 讀取路徑部分。
- 讀寫文字時傳入 encoding='utf-8'。
- 路徑可能不存在時,read_text 前先檢查 is_file。
- 穩定輸出用 as_posix(),檔案操作用原生路徑。
常見問題
Windows 上也有 pathlib 嗎?
有。pathlib 是標準函式庫的一部分,會根據作業系統選擇正確的分隔符。
write_text 會建立父目錄嗎?
不會。父目錄必須已經存在;需要時先建立。
應該把路徑儲存成字串嗎?
程式內部使用 Path 物件。只有 API 明確要求字串時,才在邊界處轉換。
練習 pathlib
12 道題,覆蓋路徑拼接、後綴、父目錄、檔案檢查和 UTF-8 文字。
繼續閱讀: