Python下载图片时长路径触发FileNotFoundError错误如何解决?
问题原因
你遇到的是Windows系统默认的MAX_PATH路径长度限制问题:Windows传统Win32 API对文件路径的默认长度限制为260个字符(包含盘符、分隔符、结尾空字符等)。
你拼接出的完整文件路径是:C:/Users/Dave/Desktop/Coolname/apple-banana-carrot-dog-electric-fish-gorilla-horse-igloo-jackrabbit-kangaroo-long-maze-nickel-octopus-pretty/apple-banana-carrot-dog-electric-fish-gorilla-horse-igloo-jackrabbit-kangaroo-long-maze-nickel-octopus-pretty.-1.jpg
总字符数已经超过260的限制,系统无法识别超长路径,因此抛出FileNotFoundError。当你缩短文件夹名后,总路径长度低于260阈值,即可正常运行。
解决方案
可任选以下任意一种方法解决:
- 方法1:开启Windows系统长路径支持(适用于Win10 1607及以上版本)
- 按下
Win+R输入regedit打开注册表编辑器 - 定位到路径
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem - 找到
LongPathsEnabled项,将值修改为1,重启电脑后生效。Python 3.6及以上版本默认适配系统长路径配置,无需额外修改代码。
- 按下
- 方法2:添加Windows扩展路径前缀(无需修改系统配置,即时生效)
在拼接绝对路径时,在最前面添加\\?\前缀,告诉Windows API忽略260字符限制,修改main.py的路径拼接代码为:
注意该方案仅支持绝对路径,不能包含location = r"\\?\C:/Users/Dave/Desktop/" + model_name + "/" + album_name + "/".、..这类相对路径标识。 - 方法3:缩短路径存储名(兼容性最好,全版本Windows通用)
对超长的album_name做哈希映射,比如取MD5值的前12位作为文件夹名,同时在同级目录下新建info.txt存储原长名称做对应,可大幅降低路径长度,避免触达长度限制。
另外建议修改downloader.py中创建文件夹的代码,添加exist_ok=True参数避免文件夹已存在时抛出异常:
os.makedirs(dest_folder, exist_ok=True)
内容的提问来源于stack exchange,提问作者WHOATEMYNOODLES
相关产品推荐
相关产品推荐

