Path需实例化且路径字符串必须有效,拼接用/运算符;exists()和is_file()返回False常因未resolve、权限不足或路径误判;读写文件仍需open(),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,而是让路径变成可链式操作的一等公民。但它的所有方法都建立在「路径字符串有效」和「当前进程有对应权限」前提上——这两点,永远得靠人来兜底。









