Este script agrupa y copia los ficheros *.log que hay en la ruta d:\aaa en grupos de 163 en tantas carpetas Q01, Q02, Q03, etc como sea necesario. Puedes editar el script y cambiar la extensión de los ficheros a distribuir y copiar, el números de ficheros de cada subcarpeta, la ruta, el nombre de la carpeta de salida (Q + 01, 02, etc).
La razón del uso de este script es simple: cada fichero *.log tiene 3.000 lineas de texto que serán importadas a hojas de ficheros Excel y estas admiten 1.048.576 celdas en cada columna. 1.048.576 / 3.000 = 349,5 ficheros *.log. Para que las hojas Excel sean más manejables divido mis 1.644 ficheros *.log (cada uno con 3.000 lineas de texto) en grupos de 163 ficheros y automáticamente se me generan 11 grupos. Cada grupo (menos el último) tiene 163 x 3.000 = 489.000 lineas...
import os
import shutil
# Set the source directory
source_dir = r'd:\aaa'
# Define the maximum number of files per folder
files_per_folder = 163
# Get a list of all .log files in the source directory
log_files = [f for f in os.listdir(source_dir) if f.endswith('.log')]
# Count the total number of files
total_files = len(log_files)
# Calculate the number of folders needed
num_folders = (total_files + files_per_folder - 1) // files_per_folder
# Create folders and distribute files
for i in range(num_folders):
# Define the folder name, e.g., Q01, Q02, ...
folder_name = f'Q{i+1:02}'
folder_path = os.path.join(source_dir, folder_name)
# Create the folder if it does not exist
os.makedirs(folder_path, exist_ok=True)
# Determine the start and end indices for the current group of files
start_idx = i * files_per_folder
end_idx = min(start_idx + files_per_folder, total_files)
# Copy the files into the current folder
for log_file in log_files[start_idx:end_idx]:
src_path = os.path.join(source_dir, log_file)
dest_path = os.path.join(folder_path, log_file)
shutil.copy(src_path, dest_path)
print("Files have been grouped and copied successfully.")