OSError: [Errno 36]文件名过长报错问题技术求助
解决OSError: [Errno 36] File name too long错误
看你这个报错信息,一眼就揪出问题根源了——你把一整个文件名列表直接拼到了输出路径里,结果生成了一个长得离谱的文件名,系统肯定扛不住啊!你看报错里的路径:
OSError: [Errno 36] File name too long: "/media/than/3E7019A6701965C5//nhandt_MaskRCNN_Nouth/['1.JPG', '18-10.JPG', ...].jpg"
这明显是把列表对象直接转成字符串当文件名用了,完全不符合系统对文件名的长度限制(Linux下一般单文件名最大255字符,路径总长度也有限制)。
具体解决步骤:
遍历文件名列表,逐个处理单张图片
你应该是在批量处理图片,但错误地把整个列表当成单个文件名来使用。改成循环遍历列表里的每个文件名,单独处理每张图:# 你的文件名列表 image_files = ['1.JPG', '18-10.JPG', '18-11.JPG', ...] font = ImageFont.truetype('/usr/share/fonts/your-font-file.ttf') # 补全你的字体路径 for img_name in image_files: # 加载单张图片 img = Image.open(f"/media/than/3E7019A6701965C5/nhandt_MaskRCNN_Nouth/{img_name}") # 这里添加你的图片处理逻辑(比如用ImageDraw添加文字) draw = ImageDraw.Draw(img) # 示例:在图片左上角添加文字 draw.text((10, 10), "Processed", font=font, fill=(255,0,0)) # 生成正确的输出路径——用单个文件名,而不是整个列表 output_path = f"/media/than/3E7019A6701965C5/nhandt_MaskRCNN_Nouth/processed_{img_name}" # 保存处理后的图片 img.save(output_path)检查文件名拼接逻辑
绝对不要把列表、字典这类复杂对象直接转成字符串拼到路径里。如果是需要生成批量处理的汇总文件,给它起一个简洁的名字,比如batch_processed.jpg,而不是把所有输入文件名都堆进去。验证文件名长度
可以提前检查生成的路径长度,避免超出系统限制:output_path = "你的输出路径" if len(output_path) > 255: print(f"警告:路径过长!{output_path}") # 这里可以调整命名规则,比如缩短文件名前缀
只要修正了“把列表当文件名”这个逻辑错误,这个报错就能解决啦!
内容的提问来源于stack exchange,提问作者user1518433
相关产品推荐
相关产品推荐

