人脸帧数据集分类整理求助:按文件名拆分真实/伪造图片至子文件夹
人脸数据集按real/fake分类的文件夹拆分方案
直接用下面的Python代码就能完成你的需求,同时规避常见的路径和文件夹创建问题:
import os import shutil # 数据集所在文件夹路径,脚本和数据集同目录则用当前路径,否则替换为绝对路径 dataset_dir = os.getcwd() # 目标分类文件夹 target_categories = ['real', 'fake'] # 创建分类文件夹(已存在则跳过) for category in target_categories: category_path = os.path.join(dataset_dir, category) os.makedirs(category_path, exist_ok=True) # 遍历并移动文件 for filename in os.listdir(dataset_dir): file_path = os.path.join(dataset_dir, filename) # 跳过子文件夹和非jpg文件 if os.path.isdir(file_path) or not filename.lower().endswith('.jpg'): continue # 提取文件的分类前缀 file_category = filename.split('_')[0] if file_category in target_categories: # 构建目标路径并移动文件 dst_path = os.path.join(dataset_dir, file_category, filename) shutil.move(file_path, dst_path) print(f"移动完成:{filename} → {file_category}/")
关键细节说明
- 文件夹创建:用
os.makedirs(..., exist_ok=True)替代os.mkdir,解决文件夹已存在时的报错问题,同时支持创建多级目录 - 路径处理:全程用
os.path.join拼接路径,自动适配Windows/macOS/Linux的路径分隔符,避免手动拼接导致的错误 - 文件过滤:只处理
.jpg格式文件,跳过子文件夹,防止误移动脚本或其他无关文件 - 分类判断:通过
split('_')[0]提取文件名前缀,完美匹配你的real_xxx.jpg/fake_xxx.jpg命名规则,比前缀匹配更准确
你之前可能踩的坑
os.mkdir报错:如果目标文件夹已存在,os.mkdir会直接抛出异常,导致后续代码无法执行,换成os.makedirs即可解决- 路径拼接错误:手动用
+ '/'拼接路径在Windows下会失效,必须用os.path.join处理跨平台路径 - 未过滤非图片文件:如果文件夹里有脚本文件或其他格式文件,会干扰分类逻辑,添加文件格式过滤即可避免
- 分类判断逻辑问题:若用
startswith('real')可能误匹配类似realistic_001.jpg的文件,用split('_')[0]更贴合你的命名规则
内容的提问来源于stack exchange,提问作者Subhram Dasgupta
相关产品推荐
相关产品推荐

