You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python按66:17:17比例将单文件夹文件随机拆分至多子文件夹

按比例随机拆分文件到多个子文件夹的Python脚本

以下是可以一键完成66:17:17比例拆分的脚本,适配你的需求:

import shutil
import random
import os

# 配置路径和拆分规则
SOURCE_DIR = 'C:\\Cyrb\\Workspace\\Sound_Training\\Python_Scripts\\Random_Selection_Tool\\Source'
TARGET_ROOT_DIR = 'C:\\Cyrb\\Workspace\\Sound_Training\\Python_Scripts\\Random_Selection_Tool\\Destination'
# 定义拆分规则:文件夹名称 -> 占比
SPLIT_RULES = [
    ('Training', 0.66),
    ('Validation', 0.17),
    ('Testing', 0.17)
]

def split_files_by_ratio():
    # 仅获取源目录下的文件(排除子文件夹)
    all_files = [f for f in os.listdir(SOURCE_DIR) if os.path.isfile(os.path.join(SOURCE_DIR, f))]
    total_files = len(all_files)
    
    if total_files == 0:
        print("源目录中没有可处理的文件")
        return

    # 随机打乱文件列表,确保拆分随机性
    random.shuffle(all_files)

    current_idx = 0
    for folder_name, ratio in SPLIT_RULES:
        # 计算当前文件夹应分配的文件数量
        file_count = int(total_files * ratio)
        # 最后一个文件夹接收所有剩余文件,避免四舍五入导致总数偏差
        if folder_name == SPLIT_RULES[-1][0]:
            file_count = total_files - current_idx

        # 截取对应批次的文件
        selected_files = all_files[current_idx:current_idx + file_count]
        current_idx += file_count

        # 自动创建目标文件夹(已存在则跳过)
        target_folder = os.path.join(TARGET_ROOT_DIR, folder_name)
        os.makedirs(target_folder, exist_ok=True)

        # 移动文件到目标文件夹
        for file_name in selected_files:
            src_path = os.path.join(SOURCE_DIR, file_name)
            dest_path = os.path.join(target_folder, file_name)
            shutil.move(src_path, dest_path)

    print("文件拆分完成!")

if __name__ == "__main__":
    split_files_by_ratio()

关键说明

  • 路径修改:直接替换SOURCE_DIR和TARGET_ROOT_DIR为你的实际路径即可
  • 比例调整:如果需要更改拆分比例,修改SPLIT_RULES中的数值即可,脚本会自动计算对应文件数量
  • 随机性保障:通过random.shuffle打乱文件列表,避免抽取偏差
  • 边界处理:最后一个文件夹自动接收剩余所有文件,解决文件总数无法被比例整除的问题
  • 自动建文件夹:无需手动创建子文件夹,脚本会自动生成
  • 过滤非文件:仅处理源目录下的文件,不会误操作子文件夹

注意事项

  • 如果需要复制文件而非移动,将shutil.move替换为shutil.copy2(保留文件元数据)
  • 运行前建议备份源文件,避免误操作导致文件丢失

内容的提问来源于stack exchange,提问作者K.dj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:00:59