Python pathlib怎么用_面向对象路径操作库Path使用详解

1次阅读

Path需实例化且路径字符串必须有效,拼接用/运算符;exists()和is_file()返回False常因未resolve、权限不足或路径误判;读写文件仍需open(),Path侧重路径操作链式化与安全性。

Python pathlib怎么用_面向对象路径操作库Path使用详解

Path对象怎么创建才不会出错

Path 不是函数,是类,必须实例化。常见错误是直接当函数调用,比如 Path("a/b") 看似正常,但若路径含 windows 风格反斜杠又在 linux 下运行,可能因字符串转义或平台差异导致 FileNotFoundError

  • Path.cwd() 获取当前工作目录,比硬写 "./" 更可靠
  • 拼接路径必须用 / 运算符(不是 +),Path("a") / "b" / "c.txt" 自动处理分隔符
  • 构造时传入空字符串、None 或非字符串类型会直接抛 TypeError,别依赖隐式转换

exists()和is_file()为什么总返回False

这两个方法不抛异常,但返回 False 的原因往往不是“文件不存在”,而是路径没解析、符号链接失效、权限不足,或者你忘了调用 resolve()

  • exists() 对 broken symlink 返回 False;想区分是否是坏链接,得先用 is_symlink()
  • is_file() 要求目标存在且是普通文件,目录、设备文件、socket 都返回 False
  • 相对路径下容易误判:如果当前工作目录变了,Path("data.csv").exists() 可能突然失效——建议用 Path("data.csv").resolve(strict=False) 先看它到底指向哪

读写文件时绕不开open(),那Path有什么用

Path 本身不替代 open(),但它把路径操作和 I/O 分离得更干净。直接调 path.read_text() 看似方便,但隐藏了编码和错误处理逻辑,线上环境容易翻车。

  • read_text() 默认用 utf-8,遇到 gbk 编码的中文文件直接报 UnicodeDecodeError
  • 大文件别用 read_bytes()read_text(),会一次性加载进内存;该用 open(path, "rb") 配合 for line in f:
  • 写入前最好先检查父目录:path.parent.mkdir(parents=True, exist_ok=True),否则 path.write_text("x") 在目录不存在时直接失败

glob()匹配不到文件?注意斜杠和驱动器盘符

glob()rglob() 是懒加载迭代器,不报错也不提示空结果,常被误以为“没匹配到”,其实是模式写错了或路径上下文不对。

立即学习Python免费学习笔记(深入)”;

  • 模式里不能用 <strong>/</strong> 开头再加绝对路径,Path("/tmp").glob("/*.log") 可以,但 Path("tmp").glob("/*<em>/</em>.log") 匹配不到任何东西
  • Windows 下 Path("C:/a").glob("<em>.py")</em> 没问题,但 Path("C:").glob("a/.py") 实际查的是当前工作目录下的 C: 盘相对路径,不是根目录
  • glob() 不跟随符号链接,默认只查当前层级;要递归又跟链接,得自己组合 iterdir() + is_symlink() 判断

Path 的核心价值不是替代 os.path,而是让路径变成可链式操作的一等公民。但它的所有方法都建立在「路径字符串有效」和「当前进程有对应权限」前提上——这两点,永远得靠人来兜底。

text=ZqhQzanResources