基于路径列表检测目标编号文件夹的video/image子文件夹缺失情况
问题解决:检查编号文件夹下的子文件夹缺失情况
需求说明
给定路径列表all_path和需要检查的子文件夹前缀列表subfolder_startswith(固定为["video","image"]),需判断每个编号文件夹下是否存在这两个子文件夹,输出缺少对应子文件夹的编号及缺失项,格式为编号: 缺失的子文件夹。
输入示例
all_path = [ "my_path/output/12345/video/folder/1", "my_path/output/12345/video/folder/2", "my_path/output/12345/video/folder/3", "my_path/output/98745/video/folder/1", "my_path/output/98745/video/folder/2", "my_path/output/90000/video/folder/1", "my_path/output/12345/image/folder/10", "my_path/output/12345/image/folder/9", "my_path/output/12345/image/folder/8", "my_path/output/98745/image/folder/3", "my_path/output/98745/image/folder/9", "my_path/output/11145/image/folder/8" ] subfolder_startswith = ["video","image"]
输出示例
11145: video 90000: image
解法实现(Python)
def find_missing_subfolders(all_path, subfolder_list): # 用字典存储每个编号对应的已存在子文件夹集合 folder_map = {} for path in all_path: parts = path.split('/') # 提取编号(路径中第3段,索引从0开始) folder_id = parts[2] # 提取子文件夹名称(路径中第4段) subfolder = parts[3] # 初始化集合,添加子文件夹 if folder_id not in folder_map: folder_map[folder_id] = set() folder_map[folder_id].add(subfolder) # 遍历所有编号,检查缺失的子文件夹 missing = [] for folder_id, existing_subfolders in folder_map.items(): for required_sub in subfolder_list: if required_sub not in existing_subfolders: missing.append(f"{folder_id}: {required_sub}") return missing # 执行函数并输出结果 result = find_missing_subfolders(all_path, subfolder_startswith) for line in result: print(line)
代码逻辑说明
- 路径解析:将每个路径按
/分割,提取出编号(路径的第3个分段)和子文件夹名称(第4个分段)。 - 构建映射关系:用字典记录每个编号下已存在的子文件夹,使用集合避免重复统计。
- 检查缺失项:对每个编号,对比需要检查的子文件夹列表,找出未在集合中的项,整理成要求的格式。
- 输出结果:遍历缺失列表,逐行打印。
内容的提问来源于stack exchange,提问作者Beyond
相关产品推荐
相关产品推荐

