Python 的 pathlib:别再用字符串拼路径
Python 的 pathlib:别再用字符串拼路径
写 Python 时处理文件路径,最常见的写法是字符串拼接:"data/" + name + ".csv"。这段代码在自己的电脑上跑得好好的,换一台 Windows 机器就可能出问题——分隔符不一样,末尾多一个斜杠就拼出双斜杠,少一个就把目录和文件名粘在一起。路径这件事,值得交给一个专门的类型来管,那就是 pathlib 的 Path。
from pathlib import Path
data_dir = Path("data") / "2026" / "11"
file = data_dir / "report.csv"
/ 运算符代替了字符串拼接和 os.path.join,读起来像路径本身的样子,而且在哪个系统上跑就用哪个系统的分隔符,不用再操心反斜杠还是正斜杠。
第二个好处是路径的各个部分都有现成的属性,不用再切字符串:
print(file.name) # report.csv
print(file.suffix) # .csv
print(file.stem) # report
print(file.parent) # data/2026/11
想换个后缀、换个目录,都是一个方法的事:file.with_suffix(".json")、file.with_name("summary.csv"),原对象不动,返回一个新的 Path,这点在写批量处理脚本时尤其顺手。
第三个要点是文件操作可以直接挂在路径上。判断存在、读、写、建目录,都不用再先 open 再拼路径:
if file.exists():
text = file.read_text(encoding="utf-8")
out = Path("output")
out.mkdir(parents=True, exist_ok=True)
(out / "result.txt").write_text("done\n", encoding="utf-8")
mkdir(parents=True, exist_ok=True) 一行就处理了“中间目录不存在”和“目录已存在”两种情况,比先判断再创建少写一串分支。
还有两个容易踩的坑值得先讲清。一是 Path 和字符串不要混着算:Path("data") + "/x.csv" 会直接报 TypeError,要拼就全程用 /,要给只接受字符串的旧接口传参就用 str(path) 转一次。二是相对路径依赖当前工作目录,脚本换个位置跑就可能指错地方;关键路径先用 .resolve() 转成绝对路径,行为才稳定:
base = Path(__file__).resolve().parent
config = base / "config.json"
以脚本自身所在目录为锚点,而不是以“从哪启动”为锚点,路径问题能少一大半。字符串能表示路径,但 Path 才真的理解路径。
- 点赞
- 收藏
- 关注作者
评论(0)