You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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之间有下划线)

修复方案

  1. 修正路径层级
    分类图片文件夹实际存放在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')
    
  2. 遍历时增加类型判断
    遍历一级目录时跳过非文件夹条目,从根源避免把文件当目录处理的问题,同时增加图片读取有效性判断,避免损坏图片导致后续流程崩溃:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 04:01:13