Seite 1 von 1

Wie Integer richtig in Datei speichern?

Verfasst: Sonntag 26. Juli 2020, 19:53
von Instinkt
Hallo,

ich bin sehr neu in der Welt des Codings und versuche mir gerade etwas Grundwissen beizubringen (mit Google / diesem Forum etc).

Nun zur Frage:
Ich möchte einen Wert immer um 1 hochzählen lassen, wenn eine bestimmte Aktion passiert (bei mir, wenn ich einen Schalter betätige). Funktioniert auch alles soweit.+
Nun möchte ich diesen Wert in einer Datei speichern und den vorhandenen Wert auslesen, um eins erhöhen und wieder speichern.

Auslesen geht, speichern geht, allerdings wird das hintereinander gespeichert und nicht, so wie es sollte, die eine Zahl in der Datei hochgezählt.
Nun die Frage: Macht das überhaupt Sinn? Wenn ja, wie ist das realisierbar?

Code: Alles auswählen

 
        fobj = open("zahlen.txt", "r+")
        wert = int(fobj.read())
        fobj.write(str(wert + 1))
        print("Zahlen: ", fobj.read())
        #print("GPIO 3 Status von 1 auf 0 geändert!")
        time.sleep(0.5)
        fobj.close()
Biei "Zahlen" bekomme ich nichts als Antwort zurück

Viele Grüße

Re: Wie Integer richtig in Datei speichern?

Verfasst: Sonntag 26. Juli 2020, 20:12
von Sirius3
Der Dateimodus `r+` ist für Textdateien nie sinnvoll. In Python ist alles ein Objekt, eine Variable fobj zu nennen, ist also nicht sehr aussagekräftig.
Lesen und Schreiben sind zwei Schritte

Code: Alles auswählen

FILENAME = "zahlen.txt"
...
with open(FILENAME, encoding="ASCII") as file:
    value = int(file.read())
value += 1
with open(FILENAME, mode="w", encoding="ASCII") as file:
    file.write(str(value))

Re: Wie Integer richtig in Datei speichern?

Verfasst: Sonntag 26. Juli 2020, 20:14
von nezzcarth
Da laufen einige Dinge schief in deinem Code. Zum Beispiel öffnest du die Datei nur einmal zum Lesen, versuchst aber auch, zu schreiben. Öffnen/Schließen von Dateien macht man in python auch immer mit einem Kontextmanager (with). Mir ist wegen "Zahlen" im print-Statement auch nicht klar, ob es jetzt um eine oder mehrere Zahlen geht.

Hier mal ein Beispiel, wie man das aufbauen könnte:

Code: Alles auswählen

#!/usr/bin/env python3
from time import sleep

FILE = 'zahlen.txt'


def store_value(value, file):
    with open(file, 'w', encoding='utf-8') as f:
        print(value, file=f)


def get_value(file):
    with open(file, 'r', encoding='utf-8') as f:
        value = int(f.readline())
        return value 


def main():
    try:
        value = get_value(FILE)
    except FileNotFoundError:
        value = 0
    if value is not None:
        print('Zahl:', value)
        sleep(0.5)
        value += 1
        store_value(value, FILE)


if __name__ == '__main__':
    main()

Re: Wie Integer richtig in Datei speichern?

Verfasst: Sonntag 26. Juli 2020, 20:43
von Instinkt
Schon einmal herzlichen Dank für eure Antworten :)

Es handelt sich um eine Zahl, die immer gelesen, dann hochgezählt und dann wieder gespeichert werden soll.

Re: Wie Integer richtig in Datei speichern?

Verfasst: Sonntag 26. Juli 2020, 21:16
von Instinkt

Code: Alles auswählen


def get_value(FILENAME):
 with open(FILENAME, encoding="ASCII") as file:
    value = int(file.read())

    
def save_value(value, FILENAME):
    with open(FILENAME, mode="w", encoding="ASCII") as file:
        file.write(str(value))

while True:
    if GPIO.input(23) == 0:
    	#weiß leider noch nicht, wie ich "value" hochzähle. Bekomme hier immer einen FEhler.
        value = get_value("zahl.txt")
        save_value(value, "zahl.txt")
        print("Zahl: ", value)
        
        
time.sleep(0.5)


Nun wird im ersten Durchgang "None" gespeichert in der Textdatei und dann läuft es natürlich nicht mehr weiter.
Habe allerdings händisch "0" eingetragen.

Re: Wie Integer richtig in Datei speichern?

Verfasst: Sonntag 26. Juli 2020, 22:06
von Sirius3
Eingerückt wird immer mit vier Leerzeichen pro Ebene, und da fehlt ein `return`.

Re: Wie Integer richtig in Datei speichern?

Verfasst: Sonntag 26. Juli 2020, 22:29
von nezzcarth
Großschreibung von Namen ist Konstanten vorbehalten und das in den Funktionen in deinem Code sind keine. Du berücksichtigst auch nicht den Fall, dass die Datei noch nicht existiert.

Re: Wie Integer richtig in Datei speichern?

Verfasst: Sonntag 26. Juli 2020, 23:13
von Instinkt
Hallo und herzlichen Dank.
Jetzt funktioniert das Ganze. Das mit dem Einrücken war mir nicht ganz klar.

Nochmals vielen lieben Dank euch beiden.
Dass die Datei fehlt, ist für mich nicht relevant, da das sowieso "nur" ein Test ist, werde den Check aber selbstverständlich einbauen. Möchte ja auch viel lernen dadurch.

Auch der Hinweis mit den Konstanten ist perfekt, habe diesen Namen nun klein geschrieben.

Nochmals vielen lieben Dank :)