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 文本。
继续阅读: