Distribuir un número de ficheros en carpetas.

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.")





Última modificación: