import os
import shutil
from pathlib import Path
def 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 gracefully
Args:
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 directory
if 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}'")
return
total_files = len(all_files)
print(f"Found {total_files} files in '{source_dir}'")
# Calculate number of groups needed
num_groups = (total_files + files_per_group - 1) // files_per_group
print(f"Creating {num_groups} groups with max {files_per_group} files each")
# Process files in batches
for 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 group
start_idx = (group_num - 1) * files_per_group
end_idx = min(group_num * files_per_group, total_files)
group_files = all_files[start_idx:end_idx]
# Move files
print(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)")