@memory: Anmerkungen zum Quelltext:
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Das ist bei dieser handvoll Zeilen noch nicht ganz so wichtig, aber wenn man es von Anfang an richtig macht, braucht man das nicht mehr ändern wenn das Programm wächst und Funktionen dazukommen und man die dann zur Fehlersuche mal interaktiv testen möchte, oder Unit Tests schreiben möchte, oder das ganze mal dokumentieren möchte, oder Teile mit `multiprocessing` paralellisieren möchte, oder…
Zeichenketten und Werte mit ``+`` zusammensetzen ist eher BASIC als Python. In Python verwendet man die `format()`-Methode auf Zeichenketten und/oder f-Zeichenkettenliterale. Die Klammern um `datum` wären an der Stelle überflüssig.
Falls Du das Namensschema der Dateien unter Kontrolle hast, solltest Du das ändern auf "%Y-%m-%d", also von den höchstwertigen Komponenten absteigend. Denn dann entspricht eine lexikografische Sortierung der Dateinamen gleichzeitig der zeitlichen Reihenfolge.
Namen sollte man nicht abkürzen, schon gar nicht mit nur einem Buchstaben. Es gibt Ausnahmen, beispielsweise `i`, `j`, `k` für Indexwerte oder `x`, `y`, `z` für Koordinaten, oder auch wenn der Namen nur in einem sehr begrenzten Sichtbarkeitsbereich existiert wie in „comprehensions“ oder Argumente bei ``lambda``-Ausdrücken. Aber wenn man `file` meint, sollte man nicht nur `f` schreiben.
Dateien sollte man wo möglich mit der ``with``-Anweisung zusammen verwenden.
Bei Textdateien sollte man immer explizit eine Kodierung beim öffnen angeben, damit das nicht vom System und dessen Einstellungen abhängig ist.
Grundatentypen haben in Namen nichts zu suchen. Das ändert sich im Laufe der Programmentwicklung gerne mal und dann hat man entweder falsche, irreführende Namen im Code oder man muss alle betroffenen Namen anpassen. Nur der Grundatentyp ist in der Regel auch kein guter Name, denn man will bei `liste` ja eigentlich gar nicht wissen das es eine Liste ist, sondern was der Inhalt bedeutet. In diesem Fall beispielsweise: `zeilen`.
`pop()` ist hier eine ineffiziente Methode wenn man einfach nur das erste Element der Liste haben möchte. Da greift man einfach mit ``liste[0]`` drauf zu. `pop()` liefert nicht nur dieses Element sondern entfernt es auch aus der Liste wobei alle volgenden Elemente um eine Position nach vorne verschoben werden müssen.
Wenn man sowieso nur die erste Zeile braucht, dann macht es aber auch wenig Sinn alle einzulesen, statt eben einfach nur die erste Zeile zu lesen.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Siehe auch den
Style Guide for Python Code.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
from datetime import date as Date
def main():
filename = f"Pumpe{Date.today():%d.%m.%Y}.txt"
with open(filename, "r", encoding="utf-8") as file:
line = next(file)
sekunden = int(line[61:68])
print(sekunden)
stunden = sekunden / 3600
print(f"Laufzeit Umwälzpumpe: {stunden:.2f}h")
if __name__ == "__main__":
main()
Der Code enthält keinerlei Fehlerbehandlung. Was soll passieren wenn die Datei nicht existiert? Was wenn sie existiert aber leer ist? Was wenn sie existiert, mindestens eine Zeile enthält, aber der Teil vom 62. bis zum 68. Zeichen nicht in eine ganze Zahl umgewandelt werden kann?
Einer dieser Fälle ist wahrscheinlich der Grund warum das nicht läuft. Ich tippe auf den ersten Fall. Die Datei wird im aktuellen Arbeitsverzeichnis gesucht. Das ist wahrscheinlich nicht das was Du denkst was es ist.