gpyxreaper.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/usr/bin/python3
  2. # -*- coding: utf-8 -*-
  3. import click
  4. import sys
  5. import functools
  6. import xml.etree.ElementTree as ET
  7. from lxml import etree
  8. from datetime import datetime
  9. @click.command()
  10. @click.option("-f", help="file gpx to process", required=True)
  11. @click.option("-o", help="outputfile", required=False)
  12. @click.option("-op", help="operation to perform", default="INV", show_default=True )
  13. def reapIt(f,op,o):
  14. tree = etree.parse(f)
  15. if op =="INV":
  16. inverse(tree)
  17. else:
  18. print("OP unknown")
  19. sys.exit()
  20. if o is None:
  21. print((etree.tostring(tree, pretty_print=True)).decode('UTF-8'))
  22. else:
  23. tree.write(o, pretty_print=True)
  24. print('File written: ' + o)
  25. def inverse(tree):
  26. s = tree.xpath('//trkpt')
  27. s = sorted(s,key=functools.cmp_to_key(timeComparator),reverse=True)
  28. # print(s[0].xpath('time/text()')[0])
  29. # print(s[-1].xpath('time/text()')[0])
  30. segs = tree.xpath('//trkseg')[0]
  31. segs.clear()
  32. for e in s:
  33. segs.append(e)
  34. def timeComparator(trkpt1, trkpt2):
  35. d1 = datetime.fromisoformat(trkpt1.xpath('time/text()')[0].replace('Z','+00:00'))
  36. d2 = datetime.fromisoformat(trkpt2.xpath('time/text()')[0].replace('Z','+00:00'))
  37. return (int)((d1.timestamp()-d2.timestamp()))
  38. if __name__ == '__main__':
  39. reapIt()