erst einmal vielen Dank für die vielen Posts in diesem Forum die mir schon oft geholfen haben wenn ich nicht mehr weiter wusste.
Dieses mal habe ich leider ein Problem was ich nicht wirklich in den Griff bekomme, ich sitze mittlerweile schon seit 2 Tagen daran und komme trotz googlen und rumprobieren einfach nicht weiter. Da ich aus einem GPX-Tracklog die Trackpunkte in ein Objekt laden und weiterverarbeiten will, muss ich auch die Zeit aus der time-Zeile importieren. Um timedelta zu verwenden muss ich die Zeit in ein Python-datetime Objekt importieren. Leider funktioniert das nicht, da ich immer nur einen Fehler erhalte.
Der Code:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Make Linestring table from gpx (Arg1)"""
import sys #Sys lib
import re #Regex lib
import datetime #Datetime lib
class gpxPoint: #Point Class
lon = "" #Longitude
lat = "" #Latitude
ele = 0.0 #Elevation
tim = [] #Time
P1 = gpxPoint() #Point 1
P2 = gpxPoint() #Point 2
GPX = "" #GPX File content
POS = 0 #Position in XML-trkpt Object
try: #Try to open gpx File else print error message and exit
with open(sys.argv[1], 'r') as f: #Open GPX-File
GPX = f.readlines() #Read Content from File in Variable
except:
print "gpx-file could not be found!"
sys.exit()
for i in GPX: #Process Lines from GPX-File
if re.search('<trkpt', i) and (POS == 0): #Detect Begin of XML-trkpt
SPLICED = re.split('"', i) #Split String
P1.lon = SPLICED[2] #Get Longitude-Value from String
P1.lat = SPLICED[4] #Get Latitude-Value from String
POS += 1 #Increase Position Variable
if re.search('<ele', i) and (POS == 1): #Detect elevation string
SPLICED = re.split('[<>]', i) #Split String
P1.ele = SPLICED[2] #Get Elevation from String
POS += 1 #Increase Position Variable
if re.search('<time', i) and (POS == 2): #Detect time string
SPLICED = re.split('[<>]', i) #Split String
print SPLICED[2]
P1.tim = datetime.datetime.fromtimestamp(SPLICED[2]) #Get time from String
#Alternative, welche ebenfalls nicht funktioniert
#SPLICED[2] = SPLICED[2].replace("Z",'') #Z am Ende des Strings entfernen
#P1.tim = datetime.datetime(re.sub('[-:.T]', ',', SPLICED[2])) #Trenner durch Kommata ersetzen und datetime Objekt erstellen
#Funktioniert!? Oo
#print re.sub('[-:.T]', ',', SPLICED[2])
#print(datetime.datetime(2012,03,16,06,42,24,000)) #Datetimeobjekt erstellen
print P1.tim
POS = 0 #Reset Position Variable
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:rmc="urn:net:trekbuddy:1.0:nmea:rmc" creator="QLandkarteGT 0.18.3 http://www.qlandkarte.org/" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd http://www.qlandkarte.org/xmlschemas/v1.1 http://www.qlandkarte.org/xmlschemas/v1.1/ql-extensions.xsd" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:ql="http://www.qlandkarte.org/xmlschemas/v1.1">
<metadata>
<time>2012-03-16T22:37:46Z</time>
</metadata>
<trk>
<name>ACTIVE LOG_10</name>
<extensions>
<gpxx:TrackExtension>
<gpxx:DisplayColor>Green</gpxx:DisplayColor>
</gpxx:TrackExtension>
</extensions>
<trkseg>
<trkpt lon="9.59856415" lat="52.39118958">
<ele>65.5071</ele>
<time>2012-03-16T07:25:18.000Z</time>
</trkpt>
<trkpt lon="13.38976383" lat="52.51198196">
<ele>45.7999</ele>
<time>2012-03-16T10:15:57.000Z</time>
<trkpt lon="8.51249218" lat="52.00837708">
<ele>139.048</ele>
<time>2012-03-16T06:42:13.000Z</time>
</trkpt>
</trkseg>
</trk>
<extensions/>
</gpx>
Leider kommt immer die Fehlermeldung
bzw.Traceback (most recent call last):
File "./gpxtolinestring.py", line 48, in <module>
P1.tim = datetime.datetime.fromtimestamp(SPLICED[2]) #Get time from String
TypeError: a float is required
wenn ich die alternative (auskommentierte) Variante versuche. Interessanterweise funktioniert es jedoch wenn man die Werte aus der Variable direkt in zum Erstellen des datetime-objekts verwendet (Letzter auskommentierter Block im Python Code) :KFile "./gpxtolinestring.py", line 53, in <module>
P1.tim = datetime.datetime(re.split(',', re.sub('[-:.T]', ',', SPLICED[2]))) #Trenner durch Kommata ersetzen und datetime Objekt erstellen
TypeError: an integer is required
Habe mittlerweile schon viel rumprobiert und bekomme es einfach nicht hin. Ich wäre echt dankbar für einen Tipp.
Gruß,
David