Python 的 pathlib:别再用字符串拼路径

举报
yd_268445051 发表于 2026/11/07 09:53:35 2026/11/07
【摘要】 Python 的 pathlib:别再用字符串拼路径写 Python 时处理文件路径,最常见的写法是字符串拼接:"data/" + name + ".csv"。这段代码在自己的电脑上跑得好好的,换一台 Windows 机器就可能出问题——分隔符不一样,末尾多一个斜杠就拼出双斜杠,少一个就把目录和文件名粘在一起。路径这件事,值得交给一个专门的类型来管,那就是 pathlib 的 Path。f...

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 才真的理解路径。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。