Wie kann ich extrahieren x, y und z-Koordinaten von geografischen Daten, die von Python?
-
20-08-2019 - |
Frage
Ich habe geographische Daten, die 14 Variablen hat. Die Daten werden in folgendem Format:
'quadname': rockport_colony_SD AUFLÖSUNG: 10 ULLAT: 43,625
ULLON: -97,87527466 LRLAT: 43,5
LRLON: -97,75027466 HDATUM: 27
ZMIN: 361.58401489 ZMAX: 413.38400269 Zmean: 396.1293335 ZSIGMA: 12.36359215 PMETHOD: 5
QUADDATE: 20001001
Die ganzen Daten viele früheren Variablen in der Folge hat.
Wie kann ich die Koordinaten ULLAT, ULLON LRLAT und aus den Daten in drei Listen extrahieren, so dass die jede Zeile einem Standort entspricht?
Diese Frage wurde von dem Problem in die Post .
Lösung
So etwas wie dies funktionieren könnte, wenn die Daten alle in einer großen flachen Textdatei ist:
import re
data = """
QUADNAME: rockport_colony_SD RESOLUTION: 10 ULLAT: 43.625
ULLON: -97.87527466 LRLAT: 43.5
LRLON: -97.75027466 HDATUM: 27
ZMIN: 361.58401489 ZMAX: 413.38400269 ZMEAN: 396.1293335 ZSIGMA: 12.36359215 PMETHOD: 5
QUADDATE: 20001001
"""
regex = re.compile(
r"""ULLAT:\ (?P<ullat>-?[\d.]+).*?
ULLON:\ (?P<ullon>-?[\d.]+).*?
LRLAT:\ (?P<lrlat>-?[\d.]+)""", re.DOTALL|re.VERBOSE)
print regex.findall(data) # Yields: [('43.625', '-97.87527466', '43.5')]
Andere Tipps
Stream Leser genannt, sollte dies Ihnen ein Liste (float, float, float). Ich schlage vor, eine Liste von 3-Tupeln, weil es wahrscheinlich bequemer sein werde und effizienter zu Fuß durch, es sei denn, aus irgendeinem Grunde nur Sie wollen alle Punkte einzeln zu bekommen.
coords = []
reader
while line=reader.readline():
index_ullat = line.find("ULLAT")
if index_ullat >= 0:
ullat = float(line[ index_ULLAT+7 : ])
line = reader.readline()
index_ullon = line.find("ULLON")
index_lrlat = line.find("LRLAT")
if index_ullon >= 0 and index_lrlat >= 0:
ullon = float(line[ index_ullon+7 : index_lrlat-1 ])
lrlat = float(line[ index_lrlat+7 : ])
else:
raise InputError, "ULLON and LRLAT didn't follow ULLAT."
coords.append(ullat, ullon, lrlat)
Es kann funktionieren, aber es ist hässlich. Ich bin kein Experte auf String-Parsing.