terminado
This commit is contained in:
@@ -1,41 +1,56 @@
|
||||
from validacion import *
|
||||
from normalizacion import *
|
||||
from validacion import validarCoordenada
|
||||
from util import haversine, convertirSegundos
|
||||
|
||||
def filtrar_telefono(fichero, tel):
|
||||
f = open(fichero, "r", encoding="utf-8")
|
||||
tel_n = normalizar_telefono(tel)
|
||||
for i in f.readlines():
|
||||
telefono = normalizar_telefono(i.split(";")[0])
|
||||
tel_n = normalizarTelefono(tel)
|
||||
for linea in f.readlines():
|
||||
telefono = normalizarTelefono(linea.split(";")[0])
|
||||
if telefono.strip() == tel_n:
|
||||
print(i)
|
||||
print(linea, end='')
|
||||
else:
|
||||
continue
|
||||
|
||||
def filtrar_nif(fichero, nif):
|
||||
f = open(fichero, "r", encoding="utf-8")
|
||||
for i in f.readlines():
|
||||
n = i.split(";")[1]
|
||||
if D.match(nif) is None:
|
||||
exit(2)
|
||||
|
||||
for linea in f.readlines():
|
||||
n = linea.split(";")[1]
|
||||
if n.strip() == nif:
|
||||
print(i)
|
||||
print(linea, end='')
|
||||
else:
|
||||
continue
|
||||
|
||||
def filtrar_instante(inicio, fin, fichero):
|
||||
# no hace falta normalizar todo, solo convertir el mes cuando es el de letra
|
||||
n = 0
|
||||
f = open(fichero, "r", encoding="utf-8")
|
||||
inicio = validarInstante(normalizar_instante(inicio.strip(), 3))
|
||||
fin = validarInstante(normalizar_instante(fin.strip(), 3))
|
||||
inicio = convertirSegundos(validarInstante(inicio))
|
||||
fin = convertirSegundos(validarInstante(fin))
|
||||
|
||||
|
||||
tupla_inicio = tuple([int(inicio[k]) for k in inicio.keys()])
|
||||
tupla_fin = tuple([int(fin[k]) for k in fin.keys()])
|
||||
for i in f.readlines():
|
||||
if validarCoordenada(i.split(';')[3].strip(), 3) is None:
|
||||
|
||||
for linea in f.readlines():
|
||||
instante = linea.split(';')[2].strip()
|
||||
if validarCoordenada(linea.split(';')[3].strip()) is None:
|
||||
continue
|
||||
instante = validarInstante(normalizar_instante(i.split(';')[2].strip(), 3))
|
||||
instante = convertirSegundos(validarInstante(instante))
|
||||
tupla_instante = tuple([int(instante[k]) for k in instante.keys()])
|
||||
if tupla_inicio < tupla_instante < tupla_fin:
|
||||
print(i, end = '')
|
||||
n += 1
|
||||
print(linea, end = '')
|
||||
|
||||
def filtrar_distancia(inicio, hasta, fichero):
|
||||
inicio = validarCoordenada(inicio)
|
||||
|
||||
print(n)
|
||||
f = open(fichero, 'r', encoding="utf-8")
|
||||
for linea in f.readlines():
|
||||
coordenada = linea.split(';')[3].strip()
|
||||
coordenada = validarCoordenada(coordenada)
|
||||
if coordenada is None:
|
||||
continue
|
||||
|
||||
if haversine(inicio, coordenada) < float(hasta) * 1000:
|
||||
print(linea, end='')
|
||||
100
proyecto/log.txt
Normal file
100
proyecto/log.txt
Normal file
@@ -0,0 +1,100 @@
|
||||
+74 34 2 9 342035038 ; 76776942-K ; 1981-01-11 04:09 ; -70.28,-161.71 ; MacBook ; 2096.4€
|
||||
194-373-047 ; 76776942-K ; DeCeMBER 3, 2059 10:01 Am ; 0691836.0000S0180824.0000W ; iPad ; 1475.6€
|
||||
+74 34 2 9 342035038 ; 16652611-J ; 11:44:30 22/04/1964 ; 54° 0' 0.0000"N , 126° 16' 12.0000" W ; iMac ; 1848€
|
||||
+46 83 1 7909 754 ; 99258096-D ; JanUArY 1, 1916 6:46 Am ; +73.86 , -169.12 ; iMac ; 1920.8€
|
||||
+34 814838821 ; 71914910-M ; 2026-02-25 18:38 ; 0095436.0000S1392060.0000W ; iMac ; 1761€
|
||||
+74 34 2 9 342035038 ; 03289271-H ; MaY 24, 2057 9:44 pm ; +41.4 , 152.15 ; iPhone ; 2200.7$
|
||||
814-838-821 ; 16652611-J ; SePtEMBeR 5, 1984 1:17 Pm ; 0444724.0000S1110524.0000E ; iPhone ; 1010.4€
|
||||
+4246 02 569 047 ; 31351294-V ; marCh 27, 2098 1:47 aM ; 89° 29' 24.0000" N ,13°22' 12.0000" E ; Apple Watch ; 1367.3$
|
||||
+979 5 1564 3 741 ; 23839279-D ; 04:40:05 14/03/1920 ; 6° 2' 60.0000" S ,109° 34'12.0000" E ; Airpods ; 1716€
|
||||
+34 020232975 ; 61333293-K ; MAy 19, 1987 11:43 am ; -32.53, 161.67 ; iPad ; 793$
|
||||
194-373-047 ; 31351294-V ; oCtoBER 4, 2091 2:41 am ; 0751236.0000N0410712.0000E ; iMac ; 650€
|
||||
+34 068701342 ; 59573254-B ; 1955-08-21 14:19 ; 44°17' 60.0000"S , 75°55' 12.0000" W ; Apple Watch ; 2035.8$
|
||||
020-232-975 ; 23839279-D ; 21:08:15 16/09/2063 ; 1° 42' 0.0000"S , 54° 45' 0.0000"W ; Airpods ; 1307.3$
|
||||
+979 5 1564 3 741 ; Z4573721-S ; DeCeMber 21, 1927 10:19 PM ; 73° 47' 60.0000"S , 154° 37' 48.0000"E ; MacBook ; 1361€
|
||||
814-838-821 ; 85496169-V ; 1975-09-13 00:44 ; +72.55 , -66.29 ; Apple Watch ; 1189$
|
||||
+34 068701342 ; 44301477-G ; 2072-02-15 03:26 ; +58.16 , +141.67 ; MacBook ; 1309€
|
||||
194-373-047 ; 31351294-V ; 13:29:37 04/09/1943 ; 0131836.0000N0783224.0000W ; iPad ; 1364.4$
|
||||
+4246 02 569 047 ; 19902072-B ; 10:21:57 08/06/1907 ; -79.01,-121.96 ; iMac ; 1339.0€
|
||||
+74 34 2 9 342035038 ; 76776942-K ; 10:57:48 13/02/1900 ; 0853900.0000N0400600.0000E ; MacBook ; 967.8$
|
||||
+4246 02 569 047 ; 13225435-K ; 1993-06-15 16:43 ; 0845400.0000N0385924.0000W ; iPad ; 2052$
|
||||
814-838-821 ; 63369686-V ; 23:09:50 20/09/1952 ; 0434500.0000S1485736.0000W ; Airpods ; 686€
|
||||
020-232-975 ; 33631289-E ; MAy 5, 2060 4:51 PM ; 73° 56' 24.0000" N , 20° 10' 12.0000" E ; Airpods ; 621.6€
|
||||
+979 5 1564 3 741 ; 61333293-K ; octObEr 15, 2061 8:04 Am ; 0565812.0000S0234912.0000E ; iPhone ; 1312.2€
|
||||
+979 5 1564 3 741 ; 80104766-K ; 1974-04-29 07:51 ; 0612024.0000N1493412.0000E ; MacBook ; 1704.4$
|
||||
+34 020232975 ; 03289271-H ; 12:24:00 30/05/1967 ; 0274160.0000N1374236.0000E ; MacBook ; 1704€
|
||||
+480 54076 13 04 9 8 ; 13225435-K ; aUgUST 23, 2014 7:44 Pm ; 0754500.0000N0180224.0000W ; iPad ; 1007$
|
||||
+74 34 2 9 342035038 ; 31351294-V ; mAY 27, 2062 1:52 am ; -4.99,-125.75 ; Apple Watch ; 1723.5€
|
||||
+480 54076 13 04 9 8 ; 44301477-G ; 1937-09-25 21:12 ; 49° 33' 36.0000" S, 27° 33' 36.0000" E ; Apple Watch ; 692.1$
|
||||
068-701-342 ; 63369686-V ; jUly 10, 2029 4:47 am ; 72° 13' 48.0000" S, 31°56' 24.0000" W ; iPad ; 2095$
|
||||
+34 505162532 ; 59573254-B ; 2005-05-10 09:09 ; -58.91, +0.47 ; MacBook ; 2009€
|
||||
+34 505162532 ; 33631289-E ; 14:54:11 10/10/2020 ; +15.08 , -98.29 ; iPad ; 769.2$
|
||||
505-162-532 ; 99258096-D ; JUNE 25, 1983 7:25 Pm ; 68° 2' 60.0000"S, 121° 24'36.0000" E ; iPhone ; 1680.5€
|
||||
068-701-342 ; 31351294-V ; november 5, 1925 7:36 Pm ; 54°30'36.0000" S , 101° 17'24.0000"W ; Apple Watch ; 941$
|
||||
+34 505162532 ; 23839279-D ; jUnE 26, 1960 9:21 aM ; 27° 3' 36.0000" N, 9° 43' 12.0000" W ; MacBook ; 2395$
|
||||
+979 5 1564 3 741 ; 23839279-D ; 2024-06-19 07:50 ; 6.66 ,+164.46 ; Airpods ; 2170.2$
|
||||
+34 505162532 ; 44301477-G ; 16:34:51 31/01/2014 ; -83.89 , +58.75 ; Apple Watch ; 199.5€
|
||||
+46 83 1 7909 754 ; 61333293-K ; FEBrUaRy 2, 1911 6:41 PM ; 0481500.0000N0945248.0000W ; MacBook ; 239€
|
||||
+979 5 1564 3 741 ; 85496169-V ; 13:42:10 26/05/1927 ; 24° 15'36.0000" S , 143° 13' 48.0000"W ; iMac ; 533.0€
|
||||
+34 194373047 ; 76776942-K ; 04:16:31 07/02/1981 ; 74°28' 12.0000" S , 46°4' 12.0000"E ; iMac ; 715.6€
|
||||
+74 34 2 9 342035038 ; 23839279-D ; 2071-06-18 04:34 ; 87.63 , 108.93 ; Apple Watch ; 401.5€
|
||||
+4246 02 569 047 ; 37987190-E ; 1973-04-12 07:53 ; +24.99 , +68.17 ; iMac ; 976.0$
|
||||
+34 505162532 ; 90973648-T ; 04:00:51 05/07/2063 ; -87.26 ,-10.72 ; iMac ; 2393.1$
|
||||
020-232-975 ; 99258096-D ; 1983-10-26 18:23 ; 0674724.0000N0983036.0000W ; iPad ; 1054.7$
|
||||
+979 5 1564 3 741 ; 71914910-M ; DECeMbER 22, 1970 12:37 am ; 50°2' 24.0000" S , 80° 49' 12.0000" W ; MacBook ; 273$
|
||||
+4246 02 569 047 ; 33631289-E ; nOVeMBEr 17, 2097 11:18 am ; 49° 41'24.0000" N ,35° 43' 12.0000" E ; Apple Watch ; 2001$
|
||||
+4246 02 569 047 ; 33631289-E ; 1994-05-06 17:21 ; -55.41 ,+27.83 ; iPhone ; 2358€
|
||||
+979 5 1564 3 741 ; 99258096-D ; 13:12:37 25/06/2093 ; +20.83 , -135.97 ; iPhone ; 2154.5$
|
||||
+979 5 1564 3 741 ; 16652611-J ; feBrUArY 1, 2047 2:15 PM ; 0840824.0000N0952512.0000W ; iPad ; 529€
|
||||
+4246 02 569 047 ; 61333293-K ; auguSt 20, 1927 5:59 PM ; 20.44 , -111.27 ; Apple Watch ; 1452€
|
||||
020-232-975 ; 80104766-K ; 05:16:03 24/01/1983 ; 0753712.0000N1622212.0000E ; iPhone ; 646.9$
|
||||
+34 194373047 ; 19902072-B ; 1972-02-25 07:37 ; 0061012.0000N0942736.0000E ; Airpods ; 2443.5$
|
||||
+34 814838821 ; Z4573721-S ; 01:21:10 04/03/1924 ; 0515212.0000S1095212.0000E ; Apple Watch ; 1732.6€
|
||||
+4246 02 569 047 ; 13225435-K ; 19:29:18 24/05/1938 ; +83.37, -174.2 ; Airpods ; 2032.6€
|
||||
+4246 02 569 047 ; 03289271-H ; 1925-10-13 14:17 ; 0103224.0000S0150412.0000E ; MacBook ; 213$
|
||||
+74 34 2 9 342035038 ; Z4573721-S ; 04:31:58 07/08/1915 ; 0720712.0000N1272736.0000E ; MacBook ; 1318.7$
|
||||
505-162-532 ; 37987190-E ; ApRil 18, 2040 3:23 aM ; 22° 5' 24.0000" N , 158° 39' 0.0000" E ; Airpods ; 333.1€
|
||||
+46 83 1 7909 754 ; 71914910-M ; 16:46:34 27/02/1966 ; 39°6'36.0000" N,55° 1' 12.0000" W ; iPhone ; 2114.4€
|
||||
+74 34 2 9 342035038 ; Z4573721-S ; 02:23:28 24/11/2056 ; 0455924.0000S1083224.0000W ; iMac ; 351$
|
||||
068-701-342 ; 79179656-V ; 15:03:39 28/04/2036 ; 0441124.0000S0633600.0000E ; iPad ; 2379€
|
||||
+4246 02 569 047 ; 76776942-K ; janUARy 12, 1968 7:14 Pm ; -32.39 , +90.7 ; iMac ; 970.6$
|
||||
+979 5 1564 3 741 ; 63369686-V ; 22:31:36 14/11/1999 ; -29.52 , -66.6 ; Apple Watch ; 1493€
|
||||
+46 83 1 7909 754 ; 79179656-V ; 1919-06-15 16:40 ; 69° 4' 12.0000" S ,21° 49' 12.0000" W ; Apple Watch ; 700.7€
|
||||
+46 83 1 7909 754 ; 71914910-M ; JuLY 23, 1929 8:30 PM ; -63.91 , +78.09 ; Airpods ; 1782€
|
||||
068-701-342 ; 16652611-J ; AuGuST 25, 1989 2:25 PM ; +86.81 , -91.05 ; iMac ; 2348$
|
||||
+4246 02 569 047 ; 71914910-M ; SEPTEmbeR 5, 1977 3:50 pm ; 80° 41' 24.0000" S ,75° 39' 0.0000" E ; Airpods ; 1280.6€
|
||||
+34 814838821 ; 99258096-D ; MaRch 12, 2058 5:26 PM ; 21°15'36.0000"S , 168° 37'12.0000" W ; iPhone ; 1370$
|
||||
+480 54076 13 04 9 8 ; 31351294-V ; sepTEMBeR 23, 2048 5:10 AM ; 0062436.0000S0331912.0000W ; iMac ; 350$
|
||||
+34 020232975 ; 63369686-V ; JunE 18, 1947 2:33 pM ; 0120824.0000S0950824.0000W ; iMac ; 975.4$
|
||||
+34 814838821 ; 99258096-D ; dEcEMBEr 18, 1984 3:27 Pm ; 37° 35' 24.0000" N , 127° 20' 60.0000" W ; iMac ; 2250.5$
|
||||
068-701-342 ; 90973648-T ; 2006-02-15 06:57 ; 0854124.0000S1005400.0000W ; iPhone ; 2258$
|
||||
+4246 02 569 047 ; 37987190-E ; 1940-06-22 19:56 ; -30.9 ,-11.66 ; iPhone ; 2327.2$
|
||||
+4246 02 569 047 ; 44301477-G ; 01:49:16 27/12/2039 ; 34°47' 60.0000" S, 117° 44'24.0000" W ; iMac ; 175.4$
|
||||
+34 068701342 ; 76776942-K ; 12:16:24 27/02/1980 ; 0161536.0000N0600600.0000E ; iPad ; 723$
|
||||
+34 068701342 ; 19902072-B ; jUnE 4, 1961 12:37 Am ; 0333860.0000N0333824.0000E ; iPad ; 2377.6$
|
||||
+4246 02 569 047 ; 37987190-E ; 1915-03-28 23:51 ; 0363000.0000N0325324.0000E ; iPad ; 1727$
|
||||
+74 34 2 9 342035038 ; 79179656-V ; 08:24:38 21/05/2015 ; 41.59, +148.45 ; Apple Watch ; 196$
|
||||
+979 5 1564 3 741 ; 33631289-E ; 20:24:56 17/06/2049 ; 0041236.0000N0345324.0000E ; iPad ; 990$
|
||||
505-162-532 ; 37987190-E ; mAY 22, 1977 4:09 PM ; -14.02 ,+173.45 ; MacBook ; 706$
|
||||
194-373-047 ; 79179656-V ; AUgUSt 20, 2056 4:13 aM ; -51.25 ,+138.57 ; MacBook ; 1809€
|
||||
194-373-047 ; 90973648-T ; 2002-06-29 11:35 ; -63.72, +75.89 ; iPhone ; 1932.9€
|
||||
+34 505162532 ; 16652611-J ; AugUSt 27, 1930 10:30 pm ; 78°46' 48.0000" N, 122°1' 12.0000" E ; iMac ; 118$
|
||||
+4246 02 569 047 ; 33631289-E ; 2021-11-12 23:13 ; 0821648.0000S1394160.0000W ; Apple Watch ; 2231€
|
||||
+46 83 1 7909 754 ; 23839279-D ; APRIl 16, 1926 5:56 aM ; 2° 30' 0.0000" S, 153° 15'36.0000" E ; Apple Watch ; 1345.8€
|
||||
+34 505162532 ; 23839279-D ; 1967-08-15 07:58 ; 59°54'36.0000" S , 14° 36' 36.0000" E ; iMac ; 156.7€
|
||||
+4246 02 569 047 ; 80104766-K ; 2005-01-07 07:10 ; -33.4 , -172.18 ; iMac ; 203$
|
||||
+480 54076 13 04 9 8 ; 23839279-D ; 00:49:43 22/05/1953 ; 0491348.0000N1051200.0000W ; iPad ; 2355.9€
|
||||
020-232-975 ; 19902072-B ; JaNUAry 30, 1915 9:02 am ; -42.0 , +21.36 ; Apple Watch ; 1672$
|
||||
+4246 02 569 047 ; 85496169-V ; 03:18:08 19/12/2019 ; 24.15, +16.49 ; Airpods ; 1196.8$
|
||||
068-701-342 ; 99258096-D ; 22:55:25 29/08/2084 ; 0784912.0000S1151760.0000W ; MacBook ; 683€
|
||||
+34 505162532 ; 37987190-E ; 1938-02-26 12:13 ; 68° 45' 0.0000" N ,61° 53' 60.0000"W ; iPhone ; 1991$
|
||||
+34 505162532 ; 13225435-K ; 1952-07-24 22:58 ; -47.85 ,-65.12 ; iPhone ; 1875$
|
||||
+979 5 1564 3 741 ; 37987190-E ; 2056-09-24 08:32 ; -48.93 , -29.25 ; Airpods ; 2016.7$
|
||||
020-232-975 ; 13225435-K ; 1926-05-07 14:44 ; 0534236.0000N1595660.0000W ; iPhone ; 231.3$
|
||||
+979 5 1564 3 741 ; 31351294-V ; 05:16:43 10/07/1913 ; +9.11 , +121.19 ; Apple Watch ; 1773€
|
||||
+34 814838821 ; 99258096-D ; 1901-03-07 17:37 ; 85°43' 12.0000"N , 103° 52' 48.0000" W ; iPad ; 1353$
|
||||
+46 83 1 7909 754 ; 61333293-K ; 1932-06-20 21:51 ; 39° 19' 12.0000" N , 29° 25' 48.0000" W ; iPhone ; 1435.9$
|
||||
+74 34 2 9 342035038 ; 85496169-V ; 23:33:11 13/05/2034 ; 0453600.0000S0734836.0000W ; MacBook ; 1809.4$
|
||||
+34 505162532 ; 37987190-E ; 2042-12-01 02:14 ; -79.5 , +21.27 ; Apple Watch ; 2256.3$
|
||||
505-162-532 ; 80104766-K ; 1925-05-29 11:59 ; +61.3 , -163.57 ; Apple Watch ; 1888$
|
||||
+46 83 1 7909 754 ; 31351294-V ; SEPtEMBeR 29, 2074 5:29 PM ; -33.76 , +179.03 ; MacBook ; 1241.1€
|
||||
@@ -1,43 +1,14 @@
|
||||
import regex as re
|
||||
import sys
|
||||
|
||||
from filtrado import *
|
||||
from validacion import *
|
||||
from normalizacion import *
|
||||
from variables import *
|
||||
# -n: normaliza el fichero en pos[-n] + 1 con los formatos:
|
||||
# +34[numero]
|
||||
# formato 2 para instantes temporales
|
||||
# formato 3 para coordenadas
|
||||
# nif, producto y precio originales
|
||||
# se puede pasar f1 para el formato de las fechas y f2 para las coordenadas [param. opc.]
|
||||
|
||||
# -sphone, -snif: filtran por teléfono y nif
|
||||
# -stime: filtran de una fecha hasta otra
|
||||
# -slocation: puntos extra
|
||||
|
||||
# la salida aparece como campo1 ; campo2 ; campo3 ; ...
|
||||
# los errores de formato o sintaxis en los argumentos son exit N
|
||||
# los errores en el archivo se ignoran
|
||||
|
||||
def main():
|
||||
l = open("../log.txt", encoding="utf-8")
|
||||
for linea in l.readlines():
|
||||
pass
|
||||
# print(validarEntrada(linea.strip()))
|
||||
|
||||
|
||||
# n, sphone, stime, snif
|
||||
arg_prueba = "-sphone 123456789 telefonos -stime 11:11:11 11:11:12 tiempos -n normalizar 1 2 -snif 12345678B fichero"
|
||||
argumentos = r"(?P<sphone>-sphone (?P<telefono>\S*) (?P<fichero>\S*))|(?P<stime>-stime (?P<inicio>\S*) (?P<final>\S*) (?P<fichero1>\S*))|(?P<n>-n (?P<fichero2>\S*))|(?P<snif>-snif (?P<nif>\S*) (?P<fichero3>\S*))"
|
||||
A = re.compile(argumentos)
|
||||
match = A.finditer(arg_prueba)
|
||||
|
||||
argv = sys.argv
|
||||
try:
|
||||
if '-n' in argv:
|
||||
fichero = argv[argv.index('-n') + 1]
|
||||
try: # un poco chapucero
|
||||
try:
|
||||
formato_fecha = int(argv[argv.index('-n') + 2])
|
||||
formato_coordenadas = int(argv[argv.index('-n') + 3])
|
||||
except IndexError:
|
||||
@@ -61,12 +32,17 @@ def main():
|
||||
fichero = argv[argv.index('-stime') + 3]
|
||||
filtrar_instante(desde, hasta, fichero)
|
||||
|
||||
elif '-slocation' in argv:
|
||||
desde = argv[argv.index('-slocation') + 1]
|
||||
hasta = argv[argv.index('-slocation') + 2]
|
||||
fichero = argv[argv.index('-slocation') + 3]
|
||||
filtrar_distancia(desde, hasta, fichero)
|
||||
|
||||
else:
|
||||
exit(1)
|
||||
|
||||
except:
|
||||
exit(2)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,60 +1,104 @@
|
||||
from validacion import *
|
||||
from validacion import validarCoordenada, validarInstante, validarTelefono
|
||||
from variables import *
|
||||
from util import decimalGrado, convertirSegundos
|
||||
|
||||
def normalizar_instante(instante, formato):
|
||||
|
||||
def normalizarInstante(instante, formato):
|
||||
d = validarInstante(instante)
|
||||
if d is None:
|
||||
return None
|
||||
|
||||
if formato == 1:
|
||||
if not d['mes'].isdigit():
|
||||
d['mes'] = meses.index(d['mes'].lower()) + 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:
|
||||
if d['mes'] in meses:
|
||||
return f"{d['mes']} {d['dia']}, {d['año']} {d['hora']}:{d['minuto']} {d['segundo']}"
|
||||
else:
|
||||
if int(d['hora']) > 12:
|
||||
d['hora'] = int(d['hora']) % 12
|
||||
try:
|
||||
d['mes'] = meses[int(d['mes']) - 1]
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
if d['mes'].isdigit():
|
||||
d['mes'] = meses[int(d['mes']) - 1]
|
||||
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']} AM"
|
||||
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:
|
||||
if not d['mes'].isdigit():
|
||||
d['mes'] = meses.index(d['mes'].lower()) + 1
|
||||
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']}"
|
||||
|
||||
if not d['segundo'].isdigit():
|
||||
d['segundo'] = '00'
|
||||
return f"{d['hora']:0>2}:{d['minuto']}:{d['segundo']} {d['dia']:0>2}/{d['mes']:0>2}/{d['año']}"
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def normalizar_telefono(telefono):
|
||||
telefono = re.sub(r'( )|(-)', r'', telefono)
|
||||
if telefono[0] != '+':
|
||||
return f'+34{telefono}'
|
||||
return telefono
|
||||
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_coordenada(coordenada, formato):
|
||||
c = validarCoordenada(coordenada, formato)
|
||||
return c
|
||||
|
||||
def normalizar(fichero, formato_fecha, formato_coordenadas):
|
||||
try:
|
||||
f = open(fichero, 'r', encoding='utf-8')
|
||||
except:
|
||||
exit(1)
|
||||
n = 0
|
||||
for i in f.readlines():
|
||||
telefono, nif, instante, coordenada, producto, precio = i.split(";")
|
||||
instante = normalizar_instante(instante.strip(), formato_fecha)
|
||||
telefono = normalizar_telefono(telefono.strip())
|
||||
n_coordenada = normalizar_coordenada(coordenada.strip(), formato_coordenadas)
|
||||
if n_coordenada is None:
|
||||
continue
|
||||
n += 1
|
||||
|
||||
print(n)
|
||||
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='')
|
||||
83
proyecto/util.py
Normal file
83
proyecto/util.py
Normal file
@@ -0,0 +1,83 @@
|
||||
from variables import letras, meses
|
||||
import math
|
||||
|
||||
def signoLetra(signo1, signo2):
|
||||
if signo1 == '+':
|
||||
letra1 = 'N'
|
||||
else:
|
||||
letra1 = 'S'
|
||||
|
||||
if signo2 == '+':
|
||||
letra2 = 'E'
|
||||
else:
|
||||
letra2 = 'W'
|
||||
|
||||
return letra1, letra2
|
||||
|
||||
def letraSigno(letra):
|
||||
if letra == 'N' or letra == 'E':
|
||||
signo = '+'
|
||||
elif letra == 'S' or letra == 'W':
|
||||
signo = '-'
|
||||
|
||||
else:
|
||||
return None
|
||||
|
||||
return signo
|
||||
|
||||
def decimalGrado(numero):
|
||||
a = float(numero)
|
||||
grados = int(numero)
|
||||
b = a - grados
|
||||
minutos = int(b*60)
|
||||
c = b*60-minutos
|
||||
segundos = int(c*60)
|
||||
return grados,minutos,segundos
|
||||
|
||||
|
||||
def gradoDecimal(grados,minutos,segundos):
|
||||
a = float(segundos)/3600 + float(minutos)/60 + float(grados)
|
||||
return a
|
||||
|
||||
def comprobarLetra(dni: str):
|
||||
num = int(dni[:-1])
|
||||
letra = dni[-1]
|
||||
if letras[num % 23] != letra:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def convertirMes(mes):
|
||||
return meses.index(mes)
|
||||
|
||||
def haversine(coord1, coord2):
|
||||
r = 6367.45 * 1000 # conversión a metros
|
||||
dlat = coord2['latitud'] - coord1['latitud']
|
||||
dlong = coord2['latitud'] - coord1['longitud']
|
||||
|
||||
dlat = math.radians(dlat)
|
||||
dlong = math.radians(dlong)
|
||||
|
||||
h = math.sin(dlat)**2 + math.cos(dlat) * math.cos(dlong) * math.sin(dlong)**2
|
||||
d = 2 * r * math.asin(math.sqrt(h))
|
||||
return d
|
||||
|
||||
def convertirSegundos(instante):
|
||||
try:
|
||||
int(instante['mes'])
|
||||
except ValueError:
|
||||
instante['mes'] = convertirMes(instante['mes'].lower())
|
||||
|
||||
try:
|
||||
int(instante['segundo'])
|
||||
|
||||
except ValueError:
|
||||
if instante['segundo'].lower == "pm":
|
||||
instante['hora'] += 12
|
||||
|
||||
if instante['hora'] == 24:
|
||||
instante['hora'] = 0
|
||||
|
||||
instante['segundo'] = 0
|
||||
|
||||
return instante
|
||||
@@ -1,32 +1,21 @@
|
||||
import regex as re
|
||||
from variables import *
|
||||
|
||||
def comprobarLetra(dni: str):
|
||||
num = int(dni[:-1])
|
||||
letra = dni[-1]
|
||||
if letras[num % 23] != letra:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
from util import comprobarLetra, gradoDecimal, letraSigno
|
||||
|
||||
|
||||
def validarTelefono(telefono): # revisar sesión 6 ej 1
|
||||
def validarTelefono(telefono):
|
||||
match = T.match(telefono)
|
||||
if match is not None:
|
||||
# if match.group('prefijo') is None:
|
||||
# prefijo = '+34'
|
||||
# else:
|
||||
# prefijo = match.group('prefijo')
|
||||
if match is not None and not match['num']:
|
||||
return {
|
||||
# 'prefijo': prefijo,
|
||||
'parte1': match.group('parte1'),
|
||||
'parte2': match.group('parte2'),
|
||||
'parte3': match.group('parte3'),
|
||||
}
|
||||
|
||||
return None
|
||||
|
||||
|
||||
elif match is not None and match['num']:
|
||||
return {
|
||||
'num': match.group('num'),
|
||||
}
|
||||
else:
|
||||
return None
|
||||
|
||||
def validarDni(dni):
|
||||
match = D.match(dni)
|
||||
@@ -46,7 +35,8 @@ def validarDni(dni):
|
||||
'numero': match['numero'],
|
||||
'letrafinal': match.group('letrafinal'),
|
||||
}
|
||||
return None
|
||||
else:
|
||||
return None
|
||||
else:
|
||||
return None
|
||||
|
||||
@@ -75,95 +65,42 @@ def validarInstante(instante):
|
||||
return None
|
||||
|
||||
|
||||
def decimalGrado(numero):
|
||||
a = float(numero)
|
||||
grados = int(numero)
|
||||
b = a - grados
|
||||
minutos = int(b*60)
|
||||
c = b*60-minutos
|
||||
segundos = int(c*60)
|
||||
return grados,minutos,segundos
|
||||
|
||||
def validarCoordenada(cadena):
|
||||
m = P.fullmatch(cadena)
|
||||
if m is not None:
|
||||
if m.group("Grados1"):
|
||||
grados1 = m.group("Grados1")
|
||||
grados2 = m.group("Grados2")
|
||||
minutos1 = m.group("Minutos1")
|
||||
minutos2 = m.group("Minutos2")
|
||||
segundos1 = m.group("Segundos1")
|
||||
segundos2 = m.group("Segundos2")
|
||||
letra1 = m.group("Letra1")
|
||||
letra2 = m.group("Letra2")
|
||||
|
||||
latitud = gradoDecimal(grados1,minutos1,segundos1)
|
||||
longitud = gradoDecimal(grados2,minutos2,segundos2)
|
||||
signo1 = letraSigno(letra1)
|
||||
signo2 = letraSigno(letra2)
|
||||
|
||||
|
||||
def gradoDecimal(grados,minutos,segundos):
|
||||
a = float(segundos)/3600 + float(minutos)/60 + float(grados)
|
||||
return a
|
||||
else: # formato 1
|
||||
signo1 = m.group("Signo1")
|
||||
latitud = float(m.group("Coord1"))
|
||||
signo2 = m.group("Signo2")
|
||||
longitud = float(m.group("Coord2"))
|
||||
|
||||
if signo1 == '-':
|
||||
latitud *= -1
|
||||
|
||||
def validarCoordenada(cadena, form):
|
||||
if P.fullmatch(cadena):
|
||||
M = P.fullmatch(cadena)
|
||||
if M.group("Grados1"):
|
||||
grados1 = M.group("Grados1")
|
||||
grados2 = M.group("Grados2")
|
||||
minutos1 = M.group("Minutos1")
|
||||
minutos2 = M.group("Minutos2")
|
||||
segundos1 = M.group("Segundos1")
|
||||
segundos2 = M.group("Segundos2")
|
||||
letra1 = M.group("Letra1")
|
||||
letra2 = M.group("Letra2")
|
||||
num1 = gradoDecimal(grados1,minutos1,segundos1)
|
||||
num2 = gradoDecimal(grados2,minutos2,segundos2)
|
||||
if letra1 == 'N':
|
||||
simb1 = '+'
|
||||
else:
|
||||
simb1 = '-'
|
||||
if letra2== 'E':
|
||||
simb2 = '+'
|
||||
else:
|
||||
simb2 = '-'
|
||||
else:
|
||||
num1 = float(M.group("Coord1"))
|
||||
num2 = float(M.group("Coord2"))
|
||||
simb1 = M.group("Signo1")
|
||||
simb2 = M.group("Signo2")
|
||||
if signo2 == '-':
|
||||
longitud *= -1
|
||||
|
||||
if form == 1:
|
||||
return f'{simb1}{round(num1,4)}, {simb2}{round(num2,4)}'
|
||||
elif form == 2:
|
||||
grados1, minutos1, segundos1= decimalGrado(num1)
|
||||
grados2, minutos2, segundos2 = decimalGrado(num2)
|
||||
if simb1 == '+':
|
||||
letra1 = 'N'
|
||||
else:
|
||||
letra1 = 'S'
|
||||
if simb2 == '+':
|
||||
letra2 = 'E'
|
||||
else:
|
||||
letra2 = 'W'
|
||||
return f'{grados1}º {minutos1}\' {segundos1:}.0000" {letra1}, {grados2}º {minutos2}\' {segundos2}.0000" {letra2}'
|
||||
elif form == 3:
|
||||
grados1, minutos1, segundos1 = decimalGrado(num1)
|
||||
grados2, minutos2, segundos2 = decimalGrado(num2)
|
||||
if simb1 == '+':
|
||||
letra1 = 'N'
|
||||
else:
|
||||
letra1 = 'S'
|
||||
if simb2 == '+':
|
||||
letra2 = 'E'
|
||||
else:
|
||||
letra2 = 'W'
|
||||
return f'{grados1:0>3}{minutos1:0>2}{segundos1:0>2}.0000{letra1}{grados2:0>3}{minutos2:0>2}{segundos2:0>2}.0000{letra2}'
|
||||
return {
|
||||
'latitud': latitud,
|
||||
'longitud': longitud
|
||||
}
|
||||
|
||||
else:
|
||||
return None
|
||||
|
||||
def validarEntrada(entrada):
|
||||
telefono, dni, fecha, coordenadas, producto, coste = entrada.split(";")
|
||||
tel = validarTelefono(telefono.strip())
|
||||
dni = validarDni(dni.strip())
|
||||
fecha = validarInstante(fecha.strip())
|
||||
coordenadas = validarCoordenada(coordenadas.strip(), 1)
|
||||
|
||||
valores = {
|
||||
'telefono': tel,
|
||||
'dni': dni,
|
||||
'fecha': fecha,
|
||||
'coordenadas': coordenadas,
|
||||
'producto': producto,
|
||||
'coste': coste,
|
||||
}
|
||||
for k in valores.keys():
|
||||
if valores[k] is None:
|
||||
return None
|
||||
return valores
|
||||
else:
|
||||
return None
|
||||
@@ -8,7 +8,7 @@ reemplazo_nie = {
|
||||
}
|
||||
meses = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']
|
||||
|
||||
t = r"(?P<prefijo>\+[0-9]+)? *(?P<parte1>\d{3})-(?P<parte2>\d{3})-(?P<parte3>\d{3})"
|
||||
t = r"((?P<prefijo>\+[0-9]+)? *(?P<parte1>\d{3})-(?P<parte2>\d{3})-(?P<parte3>\d{3}))|((?P<parte1>\d{3}) *(?P<parte2>\d{3}) *(?P<parte3>\d{3}))|( *\+(?P<num>(\d *){10,15}))"
|
||||
T = re.compile(t)
|
||||
|
||||
d = r"(((?P<letrainicio>[X-Z])*(?P<numero>\d{7}))|(?P<numero>\d{8}))-(?P<letrafinal>[A-HJ-NP-TV-Z])" # cambiar, el nie son 7
|
||||
|
||||
Reference in New Issue
Block a user