Seite 1 von 1

Textdatei lesen, Datensätze mit Trenner ";"

Verfasst: Sonntag 6. November 2022, 17:25
von kiaralle
Hi,
ich hatte jetzt die Idee aus einer Textdatei Datenreihen zeilenweise zu lesen, dann mit split() zu trennen.

Klima;;;;0;0;0;1000;1;4300;
WB1;;;;50;100;16;;2;4300;

Code: Alles auswählen

#Setupdatei lesen
def setuplesen():
    #datei_setup = open('/var/www/html/setup.txt','r')
    datei_setup = open('./setup.txt','r')    
    zeile_setup = datei_setup.readlines()
    relais_1_setup  = zeile_setup[1]
    relais_2_setup  = zeile_setup[2]
    relais_3_setup  = zeile_setup[3]
    relais_4_setup  = zeile_setup[4]
    relais_5_setup  = zeile_setup[5]
    relais_6_setup  = zeile_setup[6]
    relais_7_setup  = zeile_setup[7]
    relais_8_setup  = zeile_setup[8]
    return {"relais_1_setup":relais_1_setup,"relais_2_setup":relais_2_setup,"relais_3_setup":relais_3_setup,"relais_4_setup":relais_4_setup,"relais_5_setup":relais_5_setup,"relais_6_setup":relais_6_setup,"relais_7_setup":relais_7_setup,"relais_8_setup":relais_8_setup}
    datei_setup.close()
   
while True: 
    setuplesen() 
    test= relais_1_setup.split(";",1)
    print(test)  
relais_1_setup zeigt er mir als nicht definiert melden

Wo ist hier mein Fehler. Oder sollte ich das anders lösen?


Gruß Kiaralle

Re: Textdatei lesen, Datensätze mit Trenner ";"

Verfasst: Sonntag 6. November 2022, 17:40
von Sirius3
Lokale Variablen in einer Funktion sind nicht außerhalb der Funktion ansprechbar. Der Rückgabewert einer Funktion ist dafür da, Werte zum Aufrufer zurückzuliefern. Dazu muß man natürlich den Rückgabewert auch benutzen.

Dateien die man öffnet, sollte man auch wieder schließen, das close wird aber wegen des `return`s nie erreicht. Am besten benutzt man dafür das with-Statement.

Wenn man anfängt, Variablennamen durchzunummerieren, dann macht man etwas falsch. Hier sollte alles einfach eine Liste bleiben. Das Wörterbuch enthält ja auch nicht mehr Information als eine einfache Liste.

csv-Dateien liest man am besten mit Hilfe des csv-Moduls.

Code: Alles auswählen

import csv

def setuplesen():
    with open('./setup.txt', encoding="utf8") as file:
        data = csv.reader(file, delimiter=";")
        return list(data)

def main():
    relaises = setuplesen()
    print(relaises[1])

if __name__ == "__main__":
    main()

Re: Textdatei lesen, Datensätze mit Trenner ";"

Verfasst: Sonntag 6. November 2022, 19:35
von kiaralle
Danke für deine Hilfe.
Das erweitert doch gleich meinen Horizont.

Schönen Sonntag :-)