You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.7 KiB

  1. # from argparse import parser
  2. from print2d import print2d
  3. import re
  4. # parser = argparse.ArgumentParser(prog = 'ctabus')
  5. # parser.add_argument('arg',metavar = 'stop-id | cross streets')
  6. # parser.add_argument('-r','--route',default = None)
  7. # parser.add_argument('-d','--direction',default = None)
  8. # args = parser.parse_args()
  9. def numb_sort(str):
  10. n = 40
  11. try:
  12. return re.sub(r'\d+',lambda match: match.group(0).rjust(n,'0'),str)
  13. except Exception as E:
  14. print(str)
  15. raise E
  16. def gen_list(objs,data,*displays,key = None,sort = 0,num_pic = True):
  17. k = displays[sort]
  18. display_data = {obj[k]:obj[data] for obj in objs}
  19. srt_keys = sorted(display_data.keys(),key=key)
  20. display = sorted(
  21. [
  22. [obj[d] for d in displays] for obj in objs
  23. ],
  24. key = lambda row: key(row[sort])
  25. )
  26. if num_pic:
  27. display = [[i] + data for i,data in enumerate(display)]
  28. opts = {
  29. 'spacer':' ',
  30. 'seperator':' ',
  31. 'interactive': True,
  32. 'bottom':'=',
  33. 'l_end':'<',
  34. 'r_end':'>',
  35. }
  36. print2d(display,**opts)
  37. if num_pic:
  38. which = None
  39. while not which:
  40. try:
  41. which = srt_keys[int(input('Which one?: '))]
  42. except ValueError:
  43. which = None
  44. return display_data[which]
  45. else:
  46. ret = None
  47. while not ret:
  48. try:
  49. ret = display_data[input('Which one?: ')]
  50. except KeyError:
  51. pass
  52. return ret
  53. if __name__ == "__main__":
  54. import json
  55. with open('stops_out.json') as file:
  56. d= json.load(file)
  57. d = d['stops']
  58. print(gen_list(d,'stpid','stpnm',key=numb_sort,num_pic=True))