Textdatei lesen, Datensätze mit Trenner ";"

Code-Stücke können hier veröffentlicht werden.
Antworten
kiaralle
User
Beiträge: 68
Registriert: Donnerstag 19. August 2021, 19:11

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
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

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()
kiaralle
User
Beiträge: 68
Registriert: Donnerstag 19. August 2021, 19:11

Danke für deine Hilfe.
Das erweitert doch gleich meinen Horizont.

Schönen Sonntag :-)
Antworten