2011-12-14 39 views
8

Đây là nỗ lực đầu tiên của tôi để sử dụng pyparsing và tôi muốn hỏi làm thế nào để lọc dòng mẫu này:pyparsing dụ

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

để có được sản lượng như: 1,52.125133215643,21.031048525561,116.898812

Nói chung tôi có vấn đề với sự hiểu biết logic pyparsing vì vậy bất kỳ sự giúp đỡ với ví dụ này sẽ được đánh giá cao. Cảm ơn

Trả lời

19

Bạn có thể bắt đầu với một cái gì đó như thế này:

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) 

Đầu ra của kịch bản là:

[52.125133215643, 21.031048525561, 116.898812] 

Chỉnh sửa: Bạn cũng có thể muốn xem xét lepl, mà là một thư viện tương tự đó là khá tài liệu đẹp. Kịch bản tương đương với đoạn mã trên là:

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

Cảm ơn rất nhiều sự giúp đỡ của bạn! – daikini

+0

Chắc chắn, tôi sẽ kiểm tra mô-đun này – daikini

+0

Nếu tôi muốn có '1' trong danh sách thì sao? Điều này sẽ trả về '1.0' vì nó sử dụng kiểu cast để float. là có cách nào để đúc chỉ này vào int? –

Các vấn đề liên quan