Datei wird erstellt, es kommt jedoch nichts an

  • Guten Tag,

    ich möchte das Datum, dieTemperatur und den Input eines GPIO Pin in eine Textdatei schreiben.


    Als Test wollte ich mit der Temperatur anfangen.

    Hier ist der Code:

    Code
    fileData = open("/home/pi/Documents/TempData","w")
    
    for i in range(5):
        fileData.write(time.strftime('%d.%m.%y %H:%M')+";"+str(readTempLines(sensor)[0])+";"+"test"+";"+str(i)+'\n')
        print(time.strftime('%d.%m.%y %H:%M:%S')+";"+str(readTempLines(sensor)[0])+";"+"test"+";"+str(i))
        time.sleep(1)
    
    
    fileData.close
    GPIO.cleanup()

    Die Ausgabe durch den print Befehl sieht so aus

    25.04.21 08:12:43;20.312;test;0

    25.04.21 08:12:46;20.25;test;1

    25.04.21 08:12:49;20.25;test;2

    25.04.21 08:12:52;20.187;test;3

    25.04.21 08:12:54;20.187;test;4


    Die Datei wird erstellt, ist aber komplett leer. Warum wird gar nichts in die Datei geschrieben, wo ist der Fehler ?


    Gruß Kai

  • Go to Best Answer
    • Best Answer

    reed: Das `cleanup()` sollte man auch sicherer machen, dass das auch aufgerufen wird wenn eine Ausnahme ausgelöst wird.


    Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).


    Worte in Namen sollten in der richtigen Reihenfolge stehen. `file_data` ist etwas anderes als `data_file`. Letzteres hat man hier.


    Namen sollte nicht kryptisch abgekürzt werden. `temp` ist eine übliche Abkürzungen für „temporär“/„temporary“. Wenn man Temperaturen meint, sollte man das ausschreiben.


    Der Code vermittelt den Eindruck als wenn in der Datei und in der Ausgabe eigentlich die gleichen Werte stehen sollten. Das ist aber nicht der Fall, denn sowohl die Zeit als auch die Messdaten werden zweimal erfasst. Beides sollte nur einmal passieren. Und da die Aufbereitung auch nahezu identisch ist, sollten die gemeinsamen Teile davon vielleicht auch besser nur *einmal* passieren.


    Das zusammenstückeln von Zeichenketten und Werten mittels ``+`` und `str()` ist eher BASIC als Python. Dafür gibt es die `format()`-Methode auf Zeichenketten und f-Zeichenkettenliterale.


    Die Datumsangabe sollte besser in der Form Jahr-Monat-Tag erfolgen, dann lässt sich das lexikographisch sortieren und man bekommt dabei die korrekte zeitliche Sortiereung.

    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.” — Edsger Dijkstra