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
相关产品推荐
相关产品推荐

