#!/usr/bin/python3 # -*- coding: utf-8 -*- import click import sys import functools import xml.etree.ElementTree as ET from lxml import etree from datetime import datetime @click.command() @click.option("-f", help="file gpx to process", required=True) @click.option("-o", help="outputfile", required=False) @click.option("-op", help="operation to perform", default="INV", show_default=True ) def reapIt(f,op,o): tree = etree.parse(f) if op =="INV": inverse(tree) else: print("OP unknown") sys.exit() if o is None: print((etree.tostring(tree, pretty_print=True)).decode('UTF-8')) else: tree.write(o, pretty_print=True) print('File written: ' + o) def inverse(tree): s = tree.xpath('//trkpt') s = sorted(s,key=functools.cmp_to_key(timeComparator),reverse=True) # print(s[0].xpath('time/text()')[0]) # print(s[-1].xpath('time/text()')[0]) segs = tree.xpath('//trkseg')[0] segs.clear() for e in s: segs.append(e) def timeComparator(trkpt1, trkpt2): d1 = datetime.fromisoformat(trkpt1.xpath('time/text()')[0].replace('Z','+00:00')) d2 = datetime.fromisoformat(trkpt2.xpath('time/text()')[0].replace('Z','+00:00')) return (int)((d1.timestamp()-d2.timestamp())) if __name__ == '__main__': reapIt()