# procesar_txt_a_csv.py """ Convierte archivos de texto de resultados de fútbol a formato CSV. """ import os import re import csv from glob import glob # Carpeta base de datos BASE_DIR = os.path.join(os.path.dirname(__file__), '../data/espana') # Expresión regular para partidos PARTIDO_REGEX = re.compile(r"\s*(\d{1,2}\.\d{2})?\s*([\w .ÁÉÍÓÚÑáéíóúñB]+)\s+v\s+([\w .ÁÉÍÓÚÑáéíóúñB]+)\s+(\d+)-(\d+)") # Expresión regular para fecha de jornada FECHA_REGEX = re.compile(r"\s*(\d{1,2}\.\d{2})?\s*([A-Za-z]{3,9})\s*(\w+)?") def procesar_archivo_txt(ruta_txt, temporada, division, salida_csv): with open(ruta_txt, 'r', encoding='utf-8') as f: lines = f.readlines() jornada = None fecha = None partidos = [] for line in lines: line = line.strip() if line.startswith('» Matchday'): jornada = line.split()[-1] elif re.match(r"\d{2}\.\d{2}", line) or line.startswith(('Sat', 'Sun', 'Mon', 'Fri', 'Thu', 'Wed', 'Tue')): fecha = line elif 'v' in line and '-' in line: m = PARTIDO_REGEX.search(line) if m: equipo_local = m.group(2).strip() equipo_visitante = m.group(3).strip() goles_local = int(m.group(4)) goles_visitante = int(m.group(5)) if goles_local > goles_visitante: resultado = '1' elif goles_local < goles_visitante: resultado = '2' else: resultado = 'X' partidos.append([ temporada, division, jornada, fecha, equipo_local, equipo_visitante, goles_local, goles_visitante, resultado ]) with open(salida_csv, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['temporada', 'division', 'jornada', 'fecha', 'local', 'visitante', 'goles_local', 'goles_visitante', 'resultado']) writer.writerows(partidos) print(f"Procesado {ruta_txt} -> {salida_csv}") if __name__ == "__main__": # Procesar todos los archivos txt de todas las temporadas y divisiones for temporada in os.listdir(BASE_DIR): temp_path = os.path.join(BASE_DIR, temporada) if os.path.isdir(temp_path): for archivo in os.listdir(temp_path): if archivo.endswith('.txt'): division = archivo.split('-')[1].replace('.txt', '') if '-' in archivo else '1' ruta_txt = os.path.join(temp_path, archivo) salida_csv = os.path.join(temp_path, archivo.replace('.txt', '.csv')) procesar_archivo_txt(ruta_txt, temporada, division, salida_csv)