当前位置: 首页 > java >正文

使用Python将大文件夹中的文件分成文件数量相等的小文件夹

使用Python将大文件夹中的文件分成文件数量相等的小文件夹:

import os
import shutil
from pathlib import Pathdef split_files_into_groups(source_dir="q:/source_dir", files_per_group=1000, prefix="q:/new"):"""Split files from source directory into groups and move them to numbered folders.Features:- Checks if source directory exists and contains files- Creates numbered folders (new_01, new_02, etc.)- Moves files in batches of specified size- Provides progress feedback- Handles errors gracefullyArgs:source_dir (str): Path to source directory (default: "sorce_dir")files_per_group (int): Max files per group (default: 1000)prefix (str): Prefix for output folders (default: "new")"""try:# Validate source directoryif not os.path.exists(source_dir):raise FileNotFoundError(f"Error: Source directory '{source_dir}' not found")if not os.path.isdir(source_dir):raise NotADirectoryError(f"Error: '{source_dir}' is not a directory")# Get all files (excluding subdirectories)all_files = [f for f in os.listdir(source_dir) if os.path.isfile(os.path.join(source_dir, f))]if not all_files:print(f"Info: No files found in '{source_dir}'")returntotal_files = len(all_files)print(f"Found {total_files} files in '{source_dir}'")# Calculate number of groups needednum_groups = (total_files + files_per_group - 1) // files_per_groupprint(f"Creating {num_groups} groups with max {files_per_group} files each")# Process files in batchesfor group_num in range(1, num_groups + 1):group_name = f"{prefix}_{group_num:02d}"  # Format as 01, 02, etc.os.makedirs(group_name, exist_ok=True)# Get files for current groupstart_idx = (group_num - 1) * files_per_groupend_idx = min(group_num * files_per_group, total_files)group_files = all_files[start_idx:end_idx]# Move filesprint(f"\nProcessing group {group_name} ({len(group_files)} files):")for i, file in enumerate(group_files, 1):src = os.path.join(source_dir, file)dst = os.path.join(group_name, file)shutil.move(src, dst)if i % 100 == 0 or i == len(group_files):print(f"  Moved {i}/{len(group_files)} files")print("\nOperation completed successfully")except Exception as e:print(f"\nError occurred: {str(e)}")print("Please check:")print("- Source directory exists and is accessible")print("- You have write permissions")print("- There are no file naming conflicts")if __name__ == "__main__":print("File Splitter Utility")print("=====================")split_files_into_groups()print("\nNote: Original files will be moved (not copied)")
  • 读取同级目录下的source_dir文件夹里的文件
  • 将这些文件分成每1000个文件一组
  • 创建以"new_"为前缀的编号文件夹(如new_01, new_02等)
  • 将每组1000个文件移动到对应的文件夹中
http://www.xdnf.cn/news/3035.html

相关文章:

  • AI编程工具“幻觉”风险与飞算JavaAl的破局之道
  • 【滑动窗口】最大连续1的个数|将x减到0的最小操作数
  • 消息处理机制 Handler、Looper 和 MessageQueue
  • DeepSeek 联手 Word,开启办公开挂模式
  • windows编译chromium环境配置官方文档说明
  • 信息系统项目管理工程师备考计算类真题讲解十一
  • 什么叫自媒体矩阵营销,多个账号ip关联如何处理
  • MapReduce的shuffle过程详解
  • IIC小记
  • ​Indira量化APP集成IAS 2.0服务器矩阵协议,正式更新上线苹果App Store
  • AI工具 Trae 创建java项目和配置运行环境完整示例
  • java 短信服务
  • 域名与DNS理解
  • 4.2.3 MYSQL事务原理分析
  • 纯C协程框架NtyCo
  • 合并两个有序链表
  • xGAP-200-SE7K-L(300T)测试
  • Git 实操:如何使用交互式 Rebase 移除指定提交(真实案例分享)
  • 公路安全知识竞赛主持稿串词
  • Express 文件上传不迷路:req.files 一次性讲明白
  • 洛谷P2142高精度减法题解
  • USB 网卡——RNDIS 控制消息流程
  • AbMole解密生物医学新材料---PCL-PVAc-PEG
  • AUTOSAR图解==>AUTOSAR_RS_InteroperabilityOfAutosarTools
  • 同步与互斥(同步)
  • 【android bluetooth 案例分析 03】【PTS 测试 】【PBAP/PCE/SSM/BV-02-C】
  • 数据中心网络架构:高效规划与自动化设计实践
  • Android 系统发展史
  • php学习笔记(全面且适合新手)
  • Android的Imageview的src属性,如果设置width和height,但是图片本身很小,那么图片会自动缩放到Imageview一样的大小吗