推荐用pathlib:现代、直观、面向对象、跨平台;os.path仅适合维护老代码或极简环境。pathlib自3.4引入,支持运算符拼接、exists()判断、read_text()读写、glob()遍历等链式操作。

Python路径操作推荐用 pathlib,它更直观、面向对象、跨平台性好;os.path 虽仍可用,但写法繁琐、易出错,适合维护老代码或极简环境。
pathlib:现代写法,链式调用很自然
从 Python 3.4 引入,Path 类把路径当对象处理,支持运算符(/)、属性访问和方法链式调用。
- 拼接路径:
Path("data") / "raw" / "file.txt"→ 自动处理分隔符,不用写os.path.join - 判断存在:
Path("config.json").exists(),比os.path.exists("config.json")更直觉 - 读写文件:
Path("log.txt").read_text(encoding="utf-8")或.write_bytes(b"..."),省去 open/close - 遍历目录:
[p for p in Path("src").glob("*.py") if p.is_file()],比os.listdir + os.path.isfile清晰得多
os.path:传统方案,函数式风格,兼容性高
适用于需支持 Python
- 拼路径:
os.path.join("home", "user", ".config")—— 注意顺序和开头斜杠问题 - 取文件名:
os.path.basename("/a/b/c.txt") → "c.txt",而os.path.dirname返回目录部分 - 绝对化:
os.path.abspath("data/../config.yaml"),但不自动展开~,需先用os.path.expanduser - 注意陷阱:函数返回字符串,不做实际检查(如
os.path.isdir("missing")返回 False,但不报错)
常见任务对照表(一目了然)
左边是 pathlib 写法,右边是等效的 os.path 写法:
立即学习“Python免费学习笔记(深入)”;
- 获取父目录:
Path("a/b/c").parent↔os.path.dirname("a/b/c") - 扩展名:
Path("x.tar.gz").suffixes → ['.tar', '.gz']↔os.path.splitext("x.tar.gz")[1](只能得最后一个) - 是否为绝对路径:
Path("/tmp").is_absolute()↔os.path.isabs("/tmp") - 创建目录(含父级):
Path("logs/error").mkdir(parents=True, exist_ok=True)↔os.makedirs("logs/error", exist_ok=True)
选哪个?看场景,不是非此即彼
新项目、脚本、数据处理一律用 pathlib;团队已有大量 os.path 代码,可逐步替换,不必强求统一;写工具库要考虑最低 Python 版本——若要支持 3.3 及以下,只能用 os.path 或引入 pathlib2 兼容包。










