Listen mit open/write

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
jCode
User
Beiträge: 2
Registriert: Samstag 12. Oktober 2019, 23:08

Hallo,

ich bin noch ein Anfänger und Probiere grade einen "Passwortmanager" zu programmieren und ich habe ein Problem, ich möchte das in ein .txt Dokument Email und Passwort in einer Liste geschrieben werden aber bei mir werden die zusammen und ohne " " oder [ ] geschrieben.

Code: Alles auswählen

def addPassword(email, password):
    f = open("data.txt", "w+")
    f.writelines(["[" + email, password + "]"])


addPassword("jCode", "123")
Weiß vielleicht Jemand wie das Geht?

LG
jCode
jCode
User
Beiträge: 2
Registriert: Samstag 12. Oktober 2019, 23:08

BTW Das "[" war ein vertzweifelter versuch es irgendwie hinzubekommen 😅
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Was genau möchtest du erreichen?

Im Moment schreibst du einen String in einer Textdatei, der aussehen soll wie eine Python-Liste. Dabei überschreibst du den ersten Eintrag immer wieder.

Das erste wäre also der Modus zum Datei öffnen:

Code: Alles auswählen

f = open("data.txt", "a")
Das 'a' steht für append(anhängen).

Als nächstes hast du den String nicht korrekt zusammengesetzt. Willst du ein Leerzeichen, dann musst du das auch in " " einfügen. Beachte auch das '\n' am Ende. Nach dem '\n' beginnt der Texteditor eine neue Zeile.

Code: Alles auswählen

f.write('["' + email + '", "' + password + '"]\n')
Es macht nicht wirklich Sinn eine Liste als String in eine Datei zu schreiben. Du könntest das ganze als Liste im Programm vorhalten und dann also csv-Datei speichern. Noch mehr Sinn würde es machen von der Liste wegzugehen und das Ganze in einem Dictionary umzusetzen. Als Alternative zur csv Datei könnte man das Objekt auch mit dem Modul pickle als solches speichern und reinitialisieren.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Dateien, die man öffnet muß man auch wieder schließen, denn sonst kann es passieren, dass der String nicht komplett gespeichert wird. Am Besten macht man das mit dem with-Statement. Der Filemodus "w+" ist falsch. Textdateien sowohl lesend als auch schreibend zu öffnen ist eigentlich nie sinnvoll. "w" benutzt man, wenn man eine leere Datei will, "a" wenn man etwas anhängen will. Beim Öffnen sollte man immer ein Encoding angeben. Dann brauchst Du ein Protokoll, also Zeichen, die sagen, dass ein Eintrag zu Ende ist, oder eMail und Passwort trennen. Das müssen Zeichen sein, die nicht in eMail oder Passwort vorkommen können. Üblich sind Newline "\n" und Tab "\t". Dann stückelt man Strings nicht mit + zusammen, sondern benutzt Stringformatierung. Alternativ kann man auch ein schon definiertes Format, wie cvs oder json benutzen.
Namenskonvention für Variablen und Funktionen ist klein_mit_unterstrich.

Code: Alles auswählen

def add_password(email, password):
    with open("data.txt", "a", encoding="utf8") as output:
       output.write(f"{email}\t{password}\n")
Antworten