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

Python调用os.listdir报NotADirectoryError[WinError 267]错误求助

npz转换脚本listdir报错解决方法

报错核心原因

你传入os.listdir()的folder_path参数不是目录,是具体的.npz文件路径,从日志打印的Processing folder: A10_-_lie_to_crouch_stageii.npz可以判断,循环逻辑存在错误:遍历输入目录时,把拿到的npz文件错当成子文件夹,又传给了os.listdir()做二次遍历。

修复步骤

  • 修正路径写法:你给路径加了r原始字符串前缀,不需要写双反斜杠,改成以下任意一种规范写法即可,避免路径解析异常:
    # 写法1:原始字符串+单反斜杠
    input_folder = r'D:\unity projects\ACCAD\ACCAD\Female1General_c3d'
    output_folder = r'D:\unity projects\ACCAD\ACCAD\Female1General_c3d_converted'
    
    # 写法2:直接用正斜杠,Windows下Python可正常识别
    # input_folder = 'D:/unity projects/ACCAD/ACCAD/Female1General_c3d'
    # output_folder = 'D:/unity projects/ACCAD/ACCAD/Female1General_c3d_converted'
    
  • 补全路径类型判断:遍历目录时先判断当前条目是文件还是文件夹,不要直接把所有条目都传给os.listdir(),参考逻辑如下:
    import os
    # 先确保输出文件夹存在
    os.makedirs(output_folder, exist_ok=True)
    
    for entry in os.listdir(input_folder):
        # 必须先拼完整路径,再判断类型
        entry_full_path = os.path.join(input_folder, entry)
        # 是npz文件就直接走转换逻辑,不要调用listdir
        if os.path.isfile(entry_full_path) and entry.endswith('.npz'):
            print(f"正在处理npz文件:{entry}")
            # 此处写你的npz读取、转换、保存到output_folder的逻辑
        
        # 确实需要遍历子文件夹时,先判断是目录再调用listdir
        elif os.path.isdir(entry_full_path):
            print(f"正在处理子文件夹:{entry}")
            for file in os.listdir(entry_full_path):
                file_full_path = os.path.join(entry_full_path, file)
                # 子文件夹下的文件处理逻辑
    
  • 快速定位错误点:如果改完还有问题,就在第18行os.listdir调用前加一行调试代码,运行后就能看到是哪一步传错了路径:
    # 加在第18行前面
    print(f"调试:当前传入listdir的路径是{folder_path},是否为目录:{os.path.isdir(folder_path)}")
    

注意:os.listdir()返回的只是目录下的条目名,不是完整路径,必须用os.path.join()把根目录和条目名拼起来,才能做类型判断或者后续文件操作,漏写这一步是这类路径错误的高频诱因。

内容的提问来源于stack exchange,提问作者Zahra Hosseini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.19 16:15:46