如何用Python对三类不同名称后缀的图像构建训练数据集
实现代码
import os import shutil # 定义文件名关键词和对应目标文件夹的映射关系 category_map = { "face": "Dog face", "body": "Dog body", "tail": "Dog tail" } # 批量创建目标文件夹,不存在则自动创建 for folder_name in category_map.values(): os.makedirs(folder_name, exist_ok=True) # 遍历当前目录及子目录下所有文件 for root, dirs, files in os.walk("."): for filename in files: if filename.endswith(".png"): # 匹配文件所属类别 target_folder = None for keyword, folder in category_map.items(): if keyword in filename: target_folder = folder break # 未匹配到类别则跳过 if not target_folder: print(f"未匹配到类别的文件:{filename}") continue # 拼接原文件完整路径和目标路径 src_path = os.path.join(root, filename) dst_path = os.path.join(target_folder, filename) # 移动文件,若需要保留原文件可替换为 shutil.copy2(src_path, dst_path) shutil.move(src_path, dst_path) print(f"已处理文件:{filename} -> {target_folder}")
注意事项
- 代码默认执行移动文件操作,如果担心原文件丢失,可将
shutil.move替换为注释中提到的shutil.copy2,复制文件到目标文件夹,原文件保留 - 代码默认按照「文件名包含对应关键词」匹配类别,和你需求里的「后缀为对应类别」逻辑一致,如果你的文件名规则是后缀用下划线分隔(如
xxx_face.png),需要更高匹配精度可将判断逻辑修改为if filename.split('.')[0].endswith(keyword) - 未匹配到任何类别的文件会在控制台打印提示,不会被移动/复制
内容的提问来源于stack exchange,提问作者user16452440
相关产品推荐
相关产品推荐

