专项练习 · 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 文本。

打开练习

继续阅读: