Files
alf/proyecto/normalizacion.py
2025-12-09 11:09:08 +01:00

104 lines
3.3 KiB
Python

from validacion import validarCoordenada, validarInstante, validarTelefono
from variables import *
from util import decimalGrado, convertirSegundos
def normalizarInstante(instante, formato):
d = validarInstante(instante)
if d is None:
return None
if formato == 1:
d = convertirSegundos(d)
return f"{d['año']}-{d['mes']:0>2}-{d['dia']:0>2} {d['hora']:0>2}:{d['minuto']}"
elif formato == 2:
try:
d['mes'] = meses[int(d['mes']) - 1]
except ValueError:
pass
if int(d['hora']) >= 12:
d['hora'] = int(d['hora']) % 12
if d['hora'] == 0:
d['hora'] = 12
return f"{d['mes'].lower()} {d['dia']}, {d['año']} {d['hora']}:{d['minuto']} PM"
if int(d['hora']) == 0:
d['hora'] = 12
return f"{d['mes'].lower()} {d['dia']}, {d['año']} {d['hora']}:{d['minuto']} AM"
elif formato == 3:
d = convertirSegundos(d)
return f"{d['hora']:0>2}:{d['minuto']}:{d['segundo']:0>2} {d['dia']:0>2}/{d['mes']:0>2}/{d['año']}"
else:
return None
def normalizarTelefono(telefono):
telf = validarTelefono(telefono)
if telf is None:
return None
else:
if 'num' in telf:
num = re.sub(r'( )|(-)', r'', telf['num'])
return f'+{num}'
elif 'parte1' in telf:
telf = re.sub(r'( )|(-)', r'', telefono)
if telf[0] != '+':
return f'+34{telf}'
return telf
else:
return None
def normalizarCoordenada(coordenada, formato):
coordenada = validarCoordenada(coordenada)
if coordenada is None:
return None
if formato == 1:
return f"{coordenada['latitud']}, {coordenada['longitud']}"
elif formato == 2 or formato == 3:
letraLatitud = 'N'
letraLongitud = 'E'
if coordenada['latitud'] < 0:
coordenada['latitud'] *= -1
letraLatitud = 'S'
if coordenada['longitud'] < 0:
coordenada['longitud'] *= -1
letraLongitud = 'W'
gradosLatitud, minutosLatitud, segundosLatitud = decimalGrado(coordenada['latitud'])
gradosLongitud, minutosLongitud, segundosLongitud = decimalGrado(coordenada['longitud'])
if formato == 2:
return f'{gradosLatitud}º {minutosLatitud}\' {segundosLatitud:}.0000" {letraLatitud}, {gradosLongitud}º {minutosLongitud}\' {segundosLongitud}.0000" {letraLongitud}'
else:
return f'{gradosLatitud:0>3}{minutosLatitud:0>2}{segundosLatitud:0>2}.0000{letraLatitud}{gradosLongitud:0>3}{minutosLongitud:0>2}{segundosLongitud:0>2}.0000{letraLongitud}'
else:
return None
def normalizar(fichero, formato_fecha, formato_coordenadas):
try:
f = open(fichero, 'r', encoding='utf-8')
except:
exit(1)
for linea in f.readlines():
telefono, nif, instante, coordenada, producto, precio = linea.split(";")
instante = normalizarInstante(instante.strip(), formato_fecha)
telefono = normalizarTelefono(telefono.strip())
coordenada = normalizarCoordenada(coordenada.strip(), formato_coordenadas)
if coordenada is None:
continue
print(f"{telefono} ; {nif} ; {instante} ; {coordenada} ; {producto} ; {precio}", end='')