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/

Responder a