运行Python动作识别数据集目录创建代码报FileNotFoundError错误如何解决
问题原因
报错触发点为dirmax = np.max(np.array(os.listdir(os.path.join(DATA_PATH, action))).astype(int))这行代码:你的逻辑默认MP_Data根目录、以及每个动作对应的子目录已经存在,但首次运行时这些目录都还没有被创建,读取不存在路径的目录列表自然会抛出文件找不到错误。除此之外就算目录已创建,如果目录为空,调用np.max处理空数组也会抛出异常。
解决方法
调整代码逻辑,增加目录不存在时的自动创建逻辑,同时兼容空目录场景:
- 首先创建根目录
MP_Data,已存在则直接跳过 - 遍历每个动作类别时,先判断对应动作的子目录是否存在,不存在则先创建
- 读取目录列表后先判断是否为空,空目录直接用你定义的
start_folder作为初始序号,非空则取现有文件夹的最大序号
修正后的完整代码
import os import numpy as np # 导出的numpy数组格式数据的存储路径 DATA_PATH = os.path.join('MP_Data') # 待检测的动作类别 actions = np.array(['hello', 'thanks', 'iloveyou']) # 每个动作采集30组视频数据 no_sequences = 30 # 每组视频包含30帧 sequence_length = 30 # 文件夹起始序号 start_folder = 30 # 新增:先创建根目录,已存在则跳过 os.makedirs(DATA_PATH, exist_ok=True) for action in actions: action_path = os.path.join(DATA_PATH, action) # 新增:先创建当前动作对应的子目录,已存在则跳过 os.makedirs(action_path, exist_ok=True) # 获取当前动作目录下的所有文件夹名 dir_list = os.listdir(action_path) if not dir_list: # 目录为空时用预设的起始序号 dirmax = start_folder else: # 非空则计算现有文件夹的最大序号 dirmax = np.max(np.array(dir_list).astype(int)) for sequence in range(1,no_sequences+1): try: os.makedirs(os.path.join(action_path, str(dirmax+sequence))) except: pass
内容的提问来源于stack exchange,提问作者OCEAN31
相关产品推荐
相关产品推荐

