pathlib.path 是唯一推荐的跨平台路径处理方式,应替代字符串拼接、os.path.join 和硬编码分隔符;需用 path(__file__).parent 定位脚本目录,对 windows 路径用 purewindowspath 解析,.resolve() 后必须配合 .exists() 验证。

pathlib.Path 是唯一推荐的跨平台路径处理方式,字符串拼接、os.path.join 或硬编码 "\" / "/" 都会在某个系统上出问题。
用 Path 替代所有字符串路径拼接
Path 对象自动适配当前系统的分隔符,且支持 / 运算符拼接,语义清晰、不易出错。
- 错误写法:
"data/" + filename、os.path.join("data", filename)、r"dataconfig.json" - 正确写法:
Path("data") / filename、Path("src") / "main.py" - 路径含变量时直接拼:
base_dir / user_id / f"{date}.log"(user_id和date是字符串) - 避免从
os.getcwd()推导路径——它依赖运行位置,不稳定;改用Path(__file__).parent定位脚本所在目录
处理用户输入或外部传入的 Windows 风格路径(含 "\")
直接用 Path(r"..configpp.ini") 在 Linux 上会失败,因为 PosixPath 不识别 为分隔符。
- 必须显式用
PureWindowsPath解析:Path(PureWindowsPath(r"..configpp.ini")) - 这样在 Linux 上也能得到
PosixPath("config/app.ini"),在 Windows 上保持WindowsPath("config\app.ini") - 不要对未过滤的用户输入直接调用
.resolve()——可能触发路径遍历(如../../etc/passwd),先做白名单校验或.is_absolute()检查
读写文件前必须检查路径存在性与类型
Path 对象不等于文件存在,尤其当路径含 ".."、符号链接或挂载点时。
- 用
.exists()判断路径是否存在,.is_file()或.is_dir()明确类型 -
.resolve()会真实解析相对路径和符号链接,但若路径不存在会抛FileNotFoundError;可加strict=False(Python 3.6+)返回逻辑路径,但需配合.exists()二次确认 - 打开文件时仍要指定
newline=''和encoding='utf-8',否则/行尾差异会导致 CSV 或日志解析异常
.resolve() 后没跟 .exists(),导致程序在某些环境静默失败——比如容器中挂载路径未就绪,或 CI 环境里测试数据目录未创建。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











