2011-12-14 20 views
8

pyparsing es mi primer intento de utilizar pyparsing y me gustaría preguntar cómo filtrar esta línea de muestreo:ejemplo

survey = '''GPS,PN1,LA52.125133215643,LN21.031048525561,EL116.898812''' 

para obtener una salida como: 1,52.125133215643,21.031048525561,116.898812

En general, tengo un problema para entender la lógica de pyparsing por lo que cualquier ayuda con este ejemplo será apreciada. Gracias

Respuesta

19

Se podría empezar con algo como esto:

from pyparsing import * 

survey = '''GPS,PN1,LA52.125133215643,LN21.031048525561,EL116.898812''' 

number = Word(nums+'.').setParseAction(lambda t: float(t[0])) 
separator = Suppress(',') 
latitude = Suppress('LA') + number 
longitude = Suppress('LN') + number 
elevation = Suppress('EL') + number 

line = (Suppress('GPS,PN1,') 
     + latitude 
     + separator 
     + longitude 
     + separator 
     + elevation) 

print line.parseString(survey) 

La salida del script es:

[52.125133215643, 21.031048525561, 116.898812] 

Editar: También puede ser que desee considerar lepl, que es una biblioteca similar que es bastante bien documentado. La secuencia de comandos equivalente a la de arriba es:

from lepl import * 

survey = '''GPS,PN1,LA52.125133215643,LN21.031048525561,EL116.898812''' 

number = Real() >> float 

with Separator(~Literal(',')): 
    latitude = ~Literal('LA') + number 
    longitude = ~Literal('LN') + number 
    elevation = ~Literal('EL') + number 

    line = (~Literal('GPS') 
      & ~Literal('PN1') 
      & latitude 
      & longitude 
      & elevation) 

print line.parse(survey) 
+0

¡Muchas gracias por su ayuda! – daikini

+0

Claro, verificaré este módulo – daikini

+0

¿Qué sucede si también quiero tener '1' en la lista? Esto devolverá '1.0' ya que usa el tipo de conversión para flotar. ¿Hay alguna forma de lanzar solo esta en int? –