os.path.exists调用异常:含多个..的相对路径失效,绝对路径正常
os.path.exists()处理含多个".."的长相对路径失效的问题
问题原因
核心是**Windows默认的MAX_PATH路径长度限制(260字符)**导致的:
- 当你使用带多个".."的相对路径时,
os.path.exists()底层调用的Windows旧API会先把相对路径和当前工作目录拼接成完整路径。如果拼接后的总长度超过260字符,API会直接判定路径不存在,返回False,哪怕实际路径是真实存在的。 - 你缩短文件名后,拼接后的总长度刚好落在260字符以内,所以能正常生效;而绝对路径本身长度没超过限制,自然也能通过检查。多个".."本身不会直接导致过长,但它们会让相对路径的字符串长度加上当前工作目录的长度更容易触碰到阈值。
解决办法
1. 先转绝对路径再检查
把相对路径展开成绝对路径后再调用exists(),绕开旧API对相对路径的长度限制:
import os rel_path = r'..\..\..\..\folder1\folder2\folder3\folder4\myfilename_extra.txt' abs_path = os.path.abspath(rel_path) print(os.path.exists(abs_path)) # 正常返回True
或者用更现代的pathlib模块,对长路径支持更友好:
from pathlib import Path rel_path = Path(r'..\..\..\..\folder1\folder2\folder3\folder4\myfilename_extra.txt') print(rel_path.resolve().exists())
2. 启用Windows长路径支持
如果拼接后的绝对路径确实超过260字符,可以修改系统设置解锁长路径:
- 打开注册表编辑器(运行
regedit) - 导航到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem - 找到
LongPathsEnabled,将其值改为1(没有的话新建一个DWORD(32位)值) - 重启电脑后生效,之后Python的文件操作API就能支持更长的路径了。
3. 手动添加长路径前缀
不想改系统设置的话,给绝对路径加上\\?\前缀,直接绕过MAX_PATH限制:
import os rel_path = r'..\..\..\..\folder1\folder2\folder3\folder4\myfilename_extra.txt' abs_path = os.path.abspath(rel_path) long_path = r'\\?\' + abs_path print(os.path.exists(long_path))
内容的提问来源于stack exchange,提问作者Alex F
相关产品推荐
相关产品推荐

