michahe schrieb:
Danke seahawk1986,
super! Funktioniert perfekt, ich hatte nur (im Gegensatz zu meiner Beschreibung) die Zeit im Format hh:mm:ss und habe die Code-Zeile 17 entsprechend angepasst. Magst Du mir noch etwas Erläuterung zu den Codezeile 13 .. 15 geben, damit ich weiter lerne?
f
ist ein file-like Objekt, das einen Iterator implementiert, der die einzelnen Zeilen der Datei ausspuckt. Zeile 13 prüft, ob die aktuell verarbeitete Zeile etwas anderes außer dem Zeilenende enthält - ein leerer String wird im if-Statement als False
gewertet - da Dateien mit einem Zeilenumbruch enden können und in dem Fall überspringt er die Zeile. :=
ist ein Assignment Operator (vgl. z.B. https://realpython.com/lessons/assignment-expressions/), der es erlaubt gleichzeitig einer Variable einen Wert zuzuweisen und diesen zu evaluieren - in der Langform könnte man das so schreiben:
| l = line.rstrip()
if not l:
continue
|
Und in Zeile 15 wird mittels _, date, time, *_ = l.split('|')
der String an den Pipe-Zeichen aufgetrennt und dann erfolgt eine Zuweisung der Werte zu Variablen. Der Unterstrich wird in Python-Code gerne benutzt, um zu signalisieren, dass einen der Wert nicht interessiert. Wir ignorieren also das erste Element aus der Liste, dann wird das zweite Element der Variablen date
zugewiesen, das dritter der Variablen time
und der Rest wird durch *_
eingesammelt.
Alternativ könnte man das z.B. auch so schreiben - aber über einen Slice einer Liste zu gehen klappt nur, wenn man einen nur benachbarte Werte interessieren (und maxsplit kann man nutzen, um sich Arbeit beim Zerlegen der Felder zu sparen):
| date, time = l.split('|', maxsplit=4)[1:3]
|