如何用Python将训练数据集10%文件迁移至验证集并自动建目录
Python实现数据集拆分:将training集10%文件迁移至validation集
核心思路
- 遍历
Dataset/training下的所有类别子目录 - 对每个类别中的文件随机筛选出10%
- 在
Dataset/validation下自动创建对应的类别目录 - 将筛选出的文件移动到目标目录
实现代码
import os import random import shutil from pathlib import Path # 基础路径配置 base_dir = Path("Dataset") train_dir = base_dir / "training" val_dir = base_dir / "validation" # 设置随机种子,保证拆分结果可复现 random.seed(42) # 遍历training下的所有类别文件夹 for class_name in os.listdir(train_dir): class_train_path = train_dir / class_name # 跳过非目录文件 if not class_train_path.is_dir(): continue # 创建validation下对应的类别目录 class_val_path = val_dir / class_name os.makedirs(class_val_path, exist_ok=True) # 获取当前类别下的所有文件 all_files = [f for f in os.listdir(class_train_path) if os.path.isfile(class_train_path / f)] # 计算要迁移的文件数量(10%) num_to_move = int(len(all_files) * 0.1) # 随机挑选文件 files_to_move = random.sample(all_files, num_to_move) # 移动选中的文件 for file_name in files_to_move: src = class_train_path / file_name dst = class_val_path / file_name shutil.move(src, dst) print("数据集拆分完成!")
关键说明
- 使用
exist_ok=True确保创建目录时不会因为已存在而报错 - 设置
random.seed(42)可以让每次拆分的结果一致,方便调试和复现 - 用
shutil.move()完成文件迁移,会直接将文件从原目录移除到目标目录 - 代码会自动跳过
training目录下的非文件夹内容,避免处理错误文件
内容的提问来源于stack exchange,提问作者gyaha
相关产品推荐
相关产品推荐

