66 lines
2.7 KiB
Python
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)
|