You need to enable JavaScript to run this app. os.listdir触发NotADirectoryError: [Errno 20] 非目录报错的解决方法
优惠活动
大模型
产品
解决方案
定价
更多

os.listdir触发NotADirectoryError: [Errno 20] 非目录报错的解决方法

执行os.listdir触发NotADirectoryError排查

复现场景

按如下流程编写代码执行时会触发指定报错:

  1. 导入os模块并配置目标路径变量:
    import os
    data_batch_1_dir = os.path.join("/content/drive/MyDrive/cifar_data/cifar dataset/data_batch_1")
    
  2. 执行统计路径下文件数量的代码行:
    print('total training batch1 images:', len(os.listdir(data_batch_1_dir)))
    

程序抛出异常:NotADirectoryError: [Errno 20] Not a directory,报错提示传入方法的路径并非有效目录。

常见触发原因

  • 最普遍的问题是传入os.listdir()的路径实际指向单个普通文件而非文件夹。很多刚接触CIFAR10的开发者会误以为data_batch_1是存储拆分图像的目录,但实际上CIFAR10原生组织格式中,这个名称对应的是没有文件后缀的二进制序列化数据文件,直接把这个文件路径传给要求入参为目录的os.listdir(),必然会触发该类报错。
  • 路径文本和实际存储的文件夹名不匹配。你配置的路径中cifar dataset字段带有空格,如果实际云盘内的文件夹是无空格命名(如cifar_dataset),会导致路径层级拼接错误,最终定位到上级目录下恰好和data_batch_1重名的普通文件,也会出现同类报错。
  • 缺少前置路径校验步骤,无法第一时间确认路径的实际属性。

排查与修正步骤

  • 先在执行os.listdir()前增加两行校验代码,明确路径的真实属性:
    # 校验目标路径是否真实存在
    print("路径存在性:", os.path.exists(data_batch_1_dir))
    # 校验目标路径是否为有效目录
    print("路径目录属性:", os.path.isdir(data_batch_1_dir))
    
    多数场景下会得到“路径存在但不是目录”的输出,对应前面提到的路径和实体错配问题。
  • 调整路径指向:如果你的目标是统计拆分存为独立图像的batch1文件夹下的图片总数,需要把路径修改到实际存放图像文件的目录层级,不要把指向单个二进制数据文件的路径传入目录遍历方法。
  • 逐段核对云盘内的实际文件夹命名,重点排查空格、下划线、大小写这类容易出现文本不一致的细节,避免路径拼接时跳转到错误层级。

内容的提问来源于stack exchange,提问作者M. Atif Altaf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 06:45:09