thorpedosg

Ts291d0K

Aug 6th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1.  
  2. # parse dict-like syntax
  3. from pyparsing import (Suppress, Regex, quotedString, Word, alphas,
  4. alphanums, oneOf, Forward, Optional, dictOf, delimitedList, removeQuotes)
  5.  
  6. LBRACK,RBRACK,LBRACE,RBRACE,COLON,COMMA = map(Suppress,"[]{}:,")
  7. integer = Regex(r"[+-]?\d+").setParseAction(lambda t:int(t[0]))
  8. real = Regex(r"[+-]?\d+\.\d*").setParseAction(lambda t:float(t[0]))
  9. string_ = Word(alphas,alphanums+"_") | quotedString.setParseAction(removeQuotes)
  10. bool_ = oneOf("true false").setParseAction(lambda t: t[0]=="true")
  11. item = Forward()
  12.  
  13. key = string_
  14. dict_ = LBRACE - Optional(dictOf(key+COLON, item+Optional(COMMA))) + RBRACE
  15. list_ = LBRACK - Optional(delimitedList(item)) + RBRACK
  16. item << (real | integer | string_ | bool_ | Group(list_ | dict_ ))
  17.  
  18. result = item.parseString(text,parseAll=True)[0]
  19. print result.data[0].dump()
  20. print result.data[0].segments[0].dump(indent=" ")
  21. print result.data[0].segments[0].flights[0].dump(indent=" - ")
  22. print result.data[0].segments[0].flights[0].flightLegs[0].dump(indent=" - - ")
  23. for seg in result.data[6].segments:
  24. for flt in seg.flights:
  25. fltleg = flt.flightLegs[0]
  26. print "%(airline)s %(airlineCode)s %(flightNo)s" % fltleg,
  27. print "%s -> %s" % (fltleg["from"].code, fltleg["to"].code)
Add Comment
Please, Sign In to add comment