import os import shutil from pathlib import Path def split_folder_files(folder_path, num_parts=8): """ 将指定文件夹中的文件平均分成 num_parts 份,每份放入一个按序号命名的子文件夹中。 :param folder_path: 要分割的文件夹路径(如 '20251023') :param num_parts: 分成几份,默认为8 """ folder = Path(folder_path) if not folder.exists(): print(f"错误:文件夹 '{folder_path}' 不存在。") return if not folder.is_dir(): print(f"错误:'{folder_path}' 不是一个文件夹。") return # 获取所有文件(排除子文件夹) files = [f for f in folder.iterdir() if f.is_file()] if len(files) == 0: print("警告:文件夹中没有文件可分割。") return # 打乱文件顺序以实现“随机”分布(可选) # 如果希望保持顺序,注释掉下一行 # random.shuffle(files) # 计算每一份大致应有多少文件 base_size = len(files) // num_parts remainder = len(files) % num_parts # 多余的前几份多分一个 start_idx = 0 for i in range(num_parts): # 前 remainder 份多放一个文件 part_size = base_size + (1 if i < remainder else 0) end_idx = start_idx + part_size part_files = files[start_idx:end_idx] part_folder = folder / str(i + 1) # 子文件夹名为 '1', '2', ..., '8' try: part_folder.mkdir(exist_ok=True) print(f"已创建文件夹: {part_folder}") except Exception as e: print(f"无法创建文件夹 {part_folder}: {e}") continue # 复制文件到子文件夹 for file_path in part_files: try: shutil.copy2(file_path, part_folder / file_path.name) except Exception as e: print(f"复制文件 {file_path.name} 时出错: {e}") print(f" → 放入 {len(part_files)} 个文件") start_idx = end_idx print(f"✅ 已完成:将 {len(files)} 个文件分成 {num_parts} 份,存放在 '{folder_path}' 内的子文件夹中。") # ================== 使用示例 ================== if __name__ == "__main__": target_folder = "20251023" # 主文件夹名 parts = 8 # 可改为你需要的份数,如 5, 10 等 split_folder_files(target_folder, num_parts=parts)