Variablen und deren Wert in Schleifen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
crazy69
User
Beiträge: 1
Registriert: Dienstag 19. November 2024, 11:45

Hallo zusammen,

ich stehe vor einem wahrscheinlich total einfachem Problem, finde aber die Lösung nicht....

Folgende Aufgabenstellung:
Ich habe mehrere Variablen, die einen Wert zugewiesen haben, z.B. so:

Code: Alles auswählen

name = max
id = 0815
fqdn =a.b.c
0S = win_2019
usw.

# Datei geöffnet
f = open("Datei.txt", "a")
Ich will Variablen UND deren Werte dokumentieren, z.B. in eine Datei schreiben.
Meine Idee war es jetzt eine for-Schleife zu bauen.
Quasi so:
Für jede Variable schreibe den Variablen und deren Wert in eine Datei.

Code: Alles auswählen

for variable in ["name", "id", "fqdn", "OS"]
  f.write(???????)
  # Ausgabe sollte nach Schleifenablauf sein: 
    "name = max"
    "id = 0815"
    "fqdn = a.b.c"
    "OS = win_2019"
Um diese for-Schleife steht nochmal eine for Schleife, die die o.g. Variablen immer wieder neu besetzt.

Gibt es da einen einfachen Ansatz?

Wahrscheinlich total einfach, ich kriege es als Python-Neuling aber nicht hin.


Vorab besten Dank für euren Support!

VG
crazy
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum bindest Du die `max`-Funktion an die Variable `name`?
Zahlen dürfen keine führende 0 haben, 0815 ist also ein Syntaxfehler.
0S ist kein gültiger Variablenname.
Dateien öffnet man immer innerhalb des with-Statements.
Du wirst niemals herausfinden, dass der Wert von `fqdn` ursprünglich mal das Attribut `c` von `a.b` war.

Wenn es wirklich um die Werte geht, dann mußt Du sie explizit schreiben, z.B. mit f-Strings:

Code: Alles auswählen

name = "Max"
id = 815
os = "win_2029"
with open("datei.txt", "a", encoding="utf8") as file:
    file.write(f"{name=}\n")
    file.write(f"{id=}\n")
    file.write(f"{os=}\n")
Benutzeravatar
Dennis89
User
Beiträge: 1550
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

falls die Datenstruktur noch frei wählbar ist und da noch mehrere Personen dazu kommen, würde sich vielleicht ein Wörterbuch anbieten:

Code: Alles auswählen

persons = {
    "name": "Max",
    "id": 815,
    "os": "win_2029",
}
with open("datei.txt", "a", encoding="utf8") as file:
    for description, value in persons.items():
        file.write(f"{description}='{value}'\n")

Grüße
Dennis

Edit: `id` gibt es schon als Built-In-Funktion, die überschreibst du damit, ein anderer Name wäre an der Stelle besser.
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei man da auch gleich noch einen Schritt weiterfragen sollte: Sollen die Daten auch wieder eingelesen werden? Denn dann würde ich nicht anfangen eigene Dateiformate zu erfinden, sondern `persons` als JSON speichern.

Bei dem '{value}' würde ich die ' entfernen und ein !r hinter value hinzufügen, denn man will in der Datei ja 815 stehen haben und nicht '815' und nicht 'Max O'Reilly' sondern "Max O'Reilly", damit das eindeutig bleibt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
bb1898
User
Beiträge: 216
Registriert: Mittwoch 12. Juli 2006, 14:28

Sirius3 hat geschrieben: Samstag 23. November 2024, 14:19 Warum bindest Du die `max`-Funktion an die Variable `name`?
Zahlen dürfen keine führende 0 haben, 0815 ist also ein Syntaxfehler.
Wenn das wirklich eine ID sein soll, für was auch immer, dann würde ich die lieber zum String machen und nicht zur Zahl. Dann kann sie nach Herzenslust führende Nullen bekommen und zukünftig vielleicht auch mit Buchstaben oder sonst was erweitert werden.
Antworten