Hola,
El 05/06/2014, a las 18:08, Jose M.Allegue <[email protected]> escribió:
> No entiendo esta linea de código:
> alt = re.findall("(?<= )(\d{1,2}) (\d{1,2}\.\d{1,2}) ([NS]),\s+(\d{1,2})
> (\d{1,2}\.\d{1,2}) ([EW]).*", line)
Jeje, es la expresión regular
(https://es.wikipedia.org/wiki/Expresi%C3%B3n_regular). Son un pequeño mundo en
sí mismas pero pueden ser muy potentes en estos casos.
Lo que hace es introducir en “alt" una lista (o varias) con los valores que
extrae de la línea “line” que se ajustan a las reglas de la expresión regular
indicada. La expresión regular en sí es la cadena "(?<= )(\d{1,2})
(\d{1,2}\.\d{1,2}) ([NS]),\s+(\d{1,2}) (\d{1,2}\.\d{1,2}) ([EW]).*”. Quiero
mencionar que hay otras alternativas que podrían funcionar e incluso adaptarse
mejor pero esta es la que se me ha ocurrido.
Si la miramos por partes:
* "(?<= )" esto indica que lo que viene detrás empezaría con un carácter en
blanco.
* "(\d{1,2})" esto extrae uno o dos dígitos como primer elemento de la lista.
* " (\d{1,2}\.\d{1,2})" después de un espacio en blanco extrae uno o dos
dígitos seguidos de un punto y uno o dos dígitos más.
* " ([NS])" después de otro espacio extrae un carácter “N" o “S”.
* ",\s+(\d{1,2})" después de una coma y un número indeterminado de espacios
extrae uno o dos dígitos.
* " (\d{1,2}\.\d{1,2})" de nuevo se extrae una combinación como la de antes.
* " ([EW])" después de un espacio extrae un carácter “E" o “W”.
* “.*" el resto de la cadena puede ser cualquier cosa.
Al final tienes en alt una lista de listas de 6 elementos. En tu caso alt solo
tiene un elemento, ya que solo encuentra el patrón para las coordenadas una vez
como mucho en cada línea. Este elemento se compone de los grados de latitud,
minutos decimales de latitud, N o S, grados de longitud, minutos decimales de
longitud y E o W.
Un saludo.
_______________________________________________
Python-es mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/