| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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)
|