quinielas/scripts/procesar_txt_a_csv.py

66 lines
2.7 KiB
Python

# 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)