Seite 1 von 1

Listen mit open/write

Verfasst: Samstag 12. Oktober 2019, 23:20
von jCode
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

Re: Listen mit open/write

Verfasst: Sonntag 13. Oktober 2019, 00:52
von jCode
BTW Das "[" war ein vertzweifelter versuch es irgendwie hinzubekommen 😅

Re: Listen mit open/write

Verfasst: Sonntag 13. Oktober 2019, 07:56
von Bolitho
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.

Re: Listen mit open/write

Verfasst: Sonntag 13. Oktober 2019, 08:24
von Sirius3
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")