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='')