需启用Windows长路径支持并使用UNC前缀:先以管理员身份运行PowerShell执行Set-ItemProperty修改注册表LongPathsEnabled为1并重启,再在Python中将路径改为“?C:path”格式;无权限时可用mklink创建短路径符号链接。

Windows长路径限制触发FileNotFoundError怎么办
Python在Windows上打开路径长度超过260字符的文件时,即使文件真实存在,也会抛出FileNotFoundError——这不是Python的问题,而是Windows默认启用了MAX_PATH限制。你用os.path.exists()或Path.exists()检查也会返回False,容易误判为“文件不存在”。
如何确认是长路径限制而非真丢失
先排除其他原因,再聚焦长路径:用资源管理器手动复制完整路径,粘贴进地址栏看能否打开;或在PowerShell中运行:Get-Item "你的完整路径"。如果报错Cannot find path且提示含260或MAX_PATH字样,基本可锁定。
-
os.getcwd()和Path(__file__).parent本身不触发该限制,但拼接后超长就会卡住 -
os.path.abspath()生成的路径若超长,后续open()仍会失败 - 哪怕路径里只多一个中文字符或空格,也可能让总长度越过临界点
启用Windows长路径支持的实操步骤
必须同时满足两项才生效:系统策略开启 + Python使用UNC前缀。缺一不可。
- 以管理员身份运行PowerShell,执行:
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlFileSystem" -Name "LongPathsEnabled" -Value 1 - 重启电脑(仅改注册表不重启无效)
- 在Python中将路径转为UNC格式:
\?C:erylongpath oile.txt,注意开头双反斜杠加问号 - 不要用
os.path.join()拼UNC路径——它会把\?当成普通目录处理。应直接字符串拼接或用pathlib.Path的resolve()(需配合\?前缀)
不改系统时的临时绕过方案
如果无管理员权限或不能重启,可用符号链接把深层目录“拉”到短路径下:
立即学习“Python免费学习笔记(深入)”;
- 在命令行用
mklink /D C:short dataerylongsubpath创建目录链接 - Python中直接读
C:shortile.txt,长度瞬间压到安全范围 - 注意
mklink需管理员权限,但链接目标路径本身无需特殊设置 - 避免用相对路径访问链接目录,否则可能再次触达长路径逻辑
真正麻烦的不是开启长路径,而是错误地以为“路径存在就一定能打开”——Windows的这个限制藏得深,且exists()和is_file()在未启用时根本不会告诉你它被静默拦截了。


















