ich weiß nicht, ob hier noch jemand dieses Hobby teilt, aber ich gehe sehr gerne und recht regelmäßig geocachen. Seit kurzem habe ich ein neues GPS-Gerät, was wirklich super ist, aber ein Manko hat: Man kann einmal darauf gespeicherte Caches nicht vom Gerät aus löschen. Will man also ein Zumüllen des Geräts vermeiden, muss man die dazugehörigen .gpx-Dateien am PC von Hand aus löschen. Dazu muss man entweder den GC-Code des Caches kennen oder in den Text jeder Datei einzeln schauen, um zu erkennen, um welchen Cache es sich handelt.
Da das etwas kompliziert ist, dachte ich, bastel ich mir ein kleines Programm, das diese Aufgabe vereinfacht. Im Moment kann es die auf dem Gerät gespeicherten Caches anzeigen, durchsuchen und löschen.
Weitere Features sind geplant, zunächst einmal eine Einbeziehung weiterer Informationen wie Schwierigkeit, Terrain-Wertung, Größe, ... in die Suche und eine Möglichkeit, die Geocaches bei der Anzeige nach einer dieser Infos zu ordnen.
Anregungen und Verbesserungsvorschläge wie immer willkommen!
Code: Alles auswählen
import os
#PATH = "C:\Users\Susanne\Dateien\Verschiedenes\Geocaching\gpx_test" # Testpfad (mit Geocaches)
PATH = "F:\Garmin\GPX" # eigentlicher Pfad zu den .gpx-Dateien auf dem Geraet
class Geocache:
def __init__(self, gccode):
self.__gccode = gccode
dateiname = "{}\{}.gpx".format(PATH,self.__gccode) # .gpx-Datei einlesen
with open(dateiname) as gc:
text = gc.read()
start = text.find("<groundspeak:name>") + 18 # Name aus der Datei auslesen und Speichern
end = text.find("</groundspeak:name>")
self.__name = text[start:end]
#weitere Eigenschaften auslesen und speichern
def get_gccode(self):
return self.__gccode
def get_name(self):
return self.__name
def kurzinfo(self): # Kurzinfo in einer Zeile
print self.__gccode, ":", self.__name
def longinfo(self): # ausfuehrliche Info (im Moment noch nicht vorhanden)
print self.__gccode, ":", self.__name
def alle_anzeigen(caches): # Kurzinfo zu allen Caches in der Liste "caches" anzeigen
for c in caches:
c.kurzinfo()
if len(caches) == 0:
print "keine Geocaches auf dem Geraet"
def einen_anzeigen(caches): # ausfuehrliche Info zu einem bestimmten Cache anzeigen und ggf. weitere Aktionen damit durchfuehren (z.B. loeschen)
gc = raw_input("Gib den GC-Code ein: ")
cache = "empty"
for c in caches:
if gc == c.get_gccode():
cache = c
if cache == "empty":
print "dieser GC-Code existiert nicht"
else:
cache.longinfo()
print "\nWas moechstest du als naechstes tun?"
print "1: diesen Cache loeschen"
print "2: zurueck"
eingabe = raw_input(">> ")
if eingabe == "1":
caches = loeschen([cache], caches)
elif eingabe == "2":
pass
return caches
def loeschen(del_liste, cacheliste): # den oder die Caches in del_liste aus cacheliste loeschen
eingabe = raw_input("\nWillst du den / die ausgewaehlten Cache(s) wirklich loeschen? (y/n) ")
if eingabe == "y":
for d in del_liste:
dateiname = "{}\{}.gpx".format(PATH, d.get_gccode())
os.remove(dateiname)
for c in cacheliste:
if d.get_gccode() == c.get_gccode():
cacheliste.remove(c)
return cacheliste
def suchen(caches): # Liste "caches" nach bestimmter Eigenschaft durchsuchen -> found_caches
found_caches = []
print "\nWonach willst du suchen?"
print "1: Name"
# hier noch weitere Suchmoeglichkeiten
eingabe = raw_input(">> ")
if eingabe == "1": # Suche im Cachenamen
suchbegriff = raw_input("Suche nach... ")
for c in caches:
if c.get_name().find(suchbegriff) != -1:
c.kurzinfo()
found_caches.append(c)
# andere Suchmoeglichkeiten
go = True
if len(found_caches) == 0:
print "keine Geocaches gefunden"
go = False
while go == True:
print "\nWas moechtest du als naechstes tun?"
print "1: alle gefundenen Caches erneut anzeigen (bei evtl. Loeschen nicht aktualisiert)"
print "2: alle gefundenen Caches loeschen"
print "3: Beschreibung fuer einen der gefundenen Caches anzeigen"
print "4: zurueck"
eingabe = raw_input(">> ")
if eingabe == "1":
for f in found_caches:
f.kurzinfo()
elif eingabe == "2":
caches = loeschen(found_caches, caches)
elif eingabe == "3":
caches = einen_anzeigen(caches)
elif eingabe == "4":
go = False
return caches
def main():
dateien = os.listdir(PATH) # alle Caches aus GCxxxxx.gpx-Dateien in PATH auslesen und in Liste geocaches speichern
geocaches = []
for d in dateien:
if len(d) == 11 and d[:2] == "GC" and d[7:]:
geocaches.append(Geocache(d[:7]))
go = True
while go == True: # Hauptmenue
print "\nWas moechtest du als naechstes tun?"
print "1: alle auf dem Geraet gespeicherten Geocaches anzeigen"
print "2: Beschreibung fuer einen bestimmten Cache anzeigen (GC-Code erforderlich)"
print "3: Geocaches durchsuchen"
print "4: Programm verlassen"
eingabe = raw_input(">> ")
if eingabe == "1":
alle_anzeigen(geocaches)
elif eingabe == "2":
geocaches = einen_anzeigen(geocaches)
elif eingabe == "3":
geocaches = suchen(geocaches)
elif eingabe == "4":
go = False
if __name__ == "__main__":
main()