Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
GregorS
- Beiträge: 3299
- Registriert: 05.06.2008 09:36:37
- Wohnort: Freiburg
-
Kontaktdaten:
Beitrag
von GregorS » 05.02.2024 11:32:09
niemand hat geschrieben: 
05.02.2024 10:36:49
pachhenk hat geschrieben: 
05.02.2024 07:12:41
Vom "trivialen Code" hatte ich eben ursprünglich geträumt.
Wenn’s wirklich trivial werden soll, wäre vielleicht Python einen Blick wert? Da ließe sich die vorliegende Aufgabe mit Bordmitteln lösen, und hübsch lesbar wär’s auch.
Das Blöde ist nur, dass sich der OP meinem Eindruck nach eher schwer mit derlei Dingen tut. Nur wegen so einer Sache eine Programmiersprache zu lernen ist wohl übertrieben. Andererseits macht das Programmieren irre Spaß ...
Naja, wie Du sagst, „einen Blick“ isses wert (wenn man die Kapazität hat).
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi und sog. Maker)
-
heisenberg
- Beiträge: 4200
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von heisenberg » 05.02.2024 12:49:15
niemand hat geschrieben: 
05.02.2024 10:36:49
pachhenk hat geschrieben: 
05.02.2024 07:12:41
Vom "trivialen Code" hatte ich eben ursprünglich geträumt.
Wenn’s wirklich trivial werden soll, wäre vielleicht Python einen Blick wert? Da ließe sich die vorliegende Aufgabe mit Bordmitteln lösen, und hübsch lesbar wär’s auch.
Ich bin jetzt nicht so der Python-Held. Zeig' Doch mal die bisherige Aufgabe als Python 3 Skript - Lösung. Ich bekomme aktuell noch Fehler, wenn ich das versuche, umzusetzen.
Code: Alles auswählen
#!/usr/bin/env python3
from pathlib import Path
import xml.etree.ElementTree as xetree
for path in Path('.').rglob('*.gpx'):
print(path.name)
data = xetree.parse(path.name)
root = data.getroot()
for e in root.findall(".//speed"):
print(e.text)
Ausgabe:
Code: Alles auswählen
../t.py
2014-03-30 05-54 So..gpx
2018-04-17 09-16 Tue.gpx
2017-08-15 09-42 Tue.gpx
2019-09-17_20-02_Tue.gpx
2020-09-18_08-58_Fri.gpx
2023-05-31_07-24_Wed.gpx
Traceback (most recent call last):
File "/home/heisenberg/gps/GPS-Tracks/../t.py", line 8, in <module>
data = xetree.parse(path.name)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/xml/etree/ElementTree.py", line 1218, in parse
tree.parse(source, parser)
File "/usr/lib/python3.11/xml/etree/ElementTree.py", line 580, in parse
self._root = parser._parse_whole(source)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
xml.etree.ElementTree.ParseError: unbound prefix: line 23, column 5
- Der Dateiname wird ausgegeben.
- Ein Fehler tritt vermutlich beim parsing der Datei "2023-05-31_07-24_Wed.gpx" auf. (... dessen XML-Struktur anders ist).
- Speed-Werte werden nicht gefunden, vermutlich aufgrund der Namespace-Geschichte.
Nachtrag: Fehler behoben. Es war die fehlende Namespace-Definition für den osmand-Namespace.
Zuletzt geändert von
heisenberg am 05.02.2024 13:23:52, insgesamt 1-mal geändert.
-
heisenberg
- Beiträge: 4200
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von heisenberg » 05.02.2024 13:07:08
Das mitgelieferte
xml.etree.ElementTree kann wohl kein vollständiges XPath. Deswegen muss man da
lxml ( --> apt install
python3-lxml) verwenden.
Damit tut das:
Code: Alles auswählen
#!/usr/bin/env python3
from pathlib import Path
import lxml.etree
my_path = "."
my_pattern = "*.gpx"
my_attr = "speed"
for path in Path(my_path).rglob(my_pattern):
root = lxml.etree.parse(str(path.parent) + "/" + str(path.name)).getroot()
max_speed = 0
for element in root.xpath(".//*[local-name()='"+my_attr+"']"):
speed = float(element.text)
if (speed > max_speed):
max_speed = speed
print(path.name + " " + str(max_speed))
Ausgabe:
Code: Alles auswählen
2014-03-30 05-54 So..gpx 12.484431266784668
2018-04-17 09-16 Tue.gpx 9.54
2017-08-15 09-42 Tue.gpx 10.09000015258789
2019-09-17_20-02_Tue.gpx 7.94
2020-09-18_08-58_Fri.gpx 29.513
2023-05-31_07-24_Wed.gpx 16.9
2015-06-06 07-21 Sa..gpx 16.476728439331055
2016-04-25 15-50 Mo..gpx 7.5
Die Python-Lösung ging mir jetzt aber nur dadurch so leicht von der Hand, weil ich vorher den XML-Part vollumfänglich verstanden habe.
Zuletzt geändert von
heisenberg am 05.02.2024 15:17:43, insgesamt 3-mal geändert.
-
pachhenk
- Beiträge: 120
- Registriert: 19.06.2004 15:49:36
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von pachhenk » 12.02.2024 07:31:11
pachhenk hat geschrieben: 
05.02.2024 07:10:57
heisenberg hat geschrieben: 
04.02.2024 14:52:52
...
Das ist dann das aktuelle Script:
...
Was soll ich sagen?
DANKE!
Die neue Version lief perfekt durch. Auch in der grossen Sammlung alle mit Ausgabe der MaxSpeed. Ds Ergenis kann ich jetzt weiterverarbeiten und bin zuversichtlich, dass ich das hinkrieg. Mal sehen...
Ich hab nochmal richtig viel Zeit investiert um die Ausgabe von Deinem Skript für mein Ziel zu verwerten. Komme aber kein bisschen vorwärts. Das einzige was ich verstehe ist die erste Zeile.
Hier laufen mittlerweile wichtigere Sachen auf und warten. Ich muss das hier erst mal abbrechen.