windows下python报filenotfounderror但文件存在,大概率是路径超260字符触发max_path限制;可通过资源管理器验证、powershell命令确认,并用\?前缀或启用系统长路径支持解决。

Windows 下 Python 报 FileNotFoundError,但文件明明存在——大概率是路径超 260 字符触发了系统级 MAX_PATH 限制,不是代码写错了,也不是文件丢了。
确认是不是长路径导致的 FileNotFound
别急着改代码,先验证是不是真被长度卡住:
- 在资源管理器地址栏直接粘贴完整路径,看能否打开;打不开且提示“路径不存在”或“太长”,基本锁定
- 在 PowerShell 中运行:
Get-Item "你的完整路径",若报错含Cannot find path和260或MAX_PATH字样,就是它 -
os.path.exists()或Path(...).exists()返回False,但用短路径(比如重命名父目录)后立刻变True,也是典型表现
用 \? 前缀绕过限制(最直接有效)
这是 Windows 原生支持的机制,Python 调用时无需额外依赖,但有硬性前提:
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
- 路径必须是**绝对路径**,相对路径加
\?会直接抛OSError: invalid path - 先调用
os.path.abspath()或Path.resolve()转成绝对路径,再拼前缀 - UNC 路径要用
\?UNC(注意多一个UNC),普通本地路径用\? - 示例:
long_path = r"\?" + os.path.abspath(r"C:erylongpath oile.txt")
启用系统长路径支持(需管理员权限+重启生效)
仅改注册表或组策略不够,Python 进程还必须以“非兼容模式”启动:
- 修改注册表项:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlFileSystemLongPathsEnabled设为1 - 或通过组策略:计算机配置 → 管理模板 → 系统 → 文件系统 → 启用“Win32 长路径支持”
- 关键一步:确保 Python 进程没勾选“以兼容模式运行”(右键 python.exe → 属性 → 兼容性 → 取消勾选)
- 启用后,
pathlib.Path和os模块大部分函数可直接处理超长路径,但os.listdir()等旧接口仍可能失败
避免踩坑的实操细节
很多看似合理的写法,在长路径场景下会静默失效:
-
os.path.join()拼出的路径若超长,后续传给open()仍会崩,得提前加\? -
Path(__file__).parent本身不触发限制,但拼上几十层子目录后就超了,建议用Path.resolve()后再加前缀 - 中文路径要特别小心:UTF-8 下一个汉字占 3 字节,260 字符 ≈ 86 个汉字,很容易越界
- 短路径名(
GetShortPathNameW)能救急,但生成的 8.3 格式不稳定,不推荐用于生产环境
真正麻烦的不是加前缀或改注册表,而是所有路径操作都得统一考虑这个前缀——漏一处,FileNotFoundError 就在那儿等着你。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










