Python读取多图片报路径找不到、目录名无效错误如何解决
Python批量读取图片路径报错排查与修复
问题复现
批量读取分类图片数据集时先后触发两类路径报错,项目目录结构如下:
初始编写的读取代码:
path = 'file_dir/dir_pict' rd = [] label[] Size = 32 for folder in os.listdir(path): for file in os.listdir(os.path.join(path, folder)): if file.endswith("png"): label.append(folder) pict = cv.imread(os.path.join(path, folder, file)) imgRGB = cv.cvtColor(pict, cv.COLORBGR2RGB)
第一次运行报错:
The system cannot find the path specified(系统找不到指定的路径)
将路径修改为绝对路径path = r"C:\Users\riandra putra\OneDrive\Documents\file_dir"后,触发第二类报错:
NotADirectoryError: [WinError 267] The directory name is invalid: 'C:\\Users\\riandra putra\\OneDrive\\Documents\\file_dir\\program01.py'
报错根因
- 第一次相对路径报错:相对路径的解析基准是Python进程的运行工作目录,而非脚本文件自身的存储位置,当二者不一致时,就会出现路径找不到的问题。
- 第二次绝对路径报错:路径层级设置错误,传入的
file_dir目录下同时存在dir_pict图片文件夹和program01.py脚本文件,os.listdir()会遍历目录下所有条目(包含文件和子文件夹),代码默认所有遍历结果都是子文件夹,遇到.py文件时会尝试将其作为目录遍历内部内容,触发目录无效错误。 - 初始代码本身存在2处语法/参数错误,即使路径正确也无法正常运行:
- 列表初始化写法错误:
label[]应改为label = [] - OpenCV颜色空间转换参数错误:
cv.COLORBGR2RGB应改为cv.COLOR_BGR2RGB(BGR和RGB之间有下划线)
- 列表初始化写法错误:
修复方案
- 修正路径层级
分类图片文件夹实际存放在dir_pict目录下,绝对路径应写为:
如果想避免硬编码绝对路径,不受运行工作目录影响,可以基于脚本自身位置拼接路径:path = r"C:\Users\riandra putra\OneDrive\Documents\file_dir\dir_pict"import os import cv2 as cv # 获取当前脚本文件所在的绝对目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接得到图片数据集目录 path = os.path.join(script_dir, 'dir_pict') - 遍历时增加类型判断
遍历一级目录时跳过非文件夹条目,从根源避免把文件当目录处理的问题,同时增加图片读取有效性判断,避免损坏图片导致后续流程崩溃:rd = [] label = [] Size = 32 for folder in os.listdir(path): folder_path = os.path.join(path, folder) # 跳过所有非文件夹条目 if not os.path.isdir(folder_path): continue for file in os.listdir(folder_path): if file.lower().endswith(".png"): img_path = os.path.join(folder_path, file) pict = cv.imread(img_path) # 跳过读取失败的损坏图片 if pict is None: print(f"图片读取失败,已跳过:{img_path}") continue label.append(folder) imgRGB = cv.cvtColor(pict, cv.COLOR_BGR2RGB) # 后续图像处理逻辑可在此处补充
内容的提问来源于stack exchange,提问作者Riandra Putra
相关产品推荐
相关产品推荐

