verschiedene Zeilen in Datei schreiben

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
kann_man_machen
User
Beiträge: 3
Registriert: Dienstag 4. April 2017, 15:45

Hey,

das ist jetzt eine ziemliche noob-frage, sorry bin kompletter Programmier Neuling.

Ich möchte ein Programm schreiben welches den User nach 'namen' und 'password' fragt, diese in einer Datei abspeichert und dann erneut die beiden Variablen abfragt, stimmen diese mit denen in der Datei überein soll "Login erfolgreich" angezeigt werden.

Hier ist mein Programm soweit:
[codebox=python file=Unbenannt.txt]
user = input ("User: ")
password = input ("Password: ")

with open ("password_liste.txt", "w") as liste_in: #Datei öffnen
liste_in.write (user+ '\n') # Username in erste Zeile schreiben
liste_in.write (password) # Password in zweite Zeile schreiben

print ("Account wurde angelegt mit Benutzername:", (user), "und Password: " ,(password))


print ("Login")

user = input ("User: ")
password = input ("Password: ")

datei_in = open ("password_liste.txt").readlines()
user_auslese = (datei_in[0]) #Erste Zeile in (user_auslese) auslesen
password_auslese = (datei_in[1]) #Zweite Zeile in (password_auslese) auslesen

if (user) == (user_auslese) and (password) == (password_auslese):
print ("Login erfolgreich")
else:
print ("Benutzername/password falsch")



[/code]

Das ganze funktioniert soweit auch wie ich mir das vorstelle, allerdings bekomme ich ein Problem, da ich in Zeile 5

Code: Alles auswählen

  liste_in.write (user+ '\n')
benutze, damit die nächste Eingabe in eine neue Zeile geschrieben wird.
Genau das wird mir dann zum Verhängnis wenn ich die txt.datei mit der Usereingabe vergleiche, da mir user_auslese dann immer wieder ein \n dranhängt und die beiden variablen so nie übereinstimmen können.
In der Text datei taucht dieses \n nicht auf, nur wenn ich meine variable (user_auslese) auslesen möchte.
BlackJack

@kann_man_machen: Doch in der Textdatei taucht dieses ' \n' auch auf — das ist das Zeichen das dafür sorgt das der weitere Text nicht in der gleichen Zeile angezeigt wird, sondern in der nächsten. Du musst das nach dem Einlesen halt wieder entfernen. Und beim Schreiben würde ich das an *jede* Zeile anhängen, auch an die letzte Zeile einer Datei.

Du übertreibst es übrigens ein bisschen mit der Klammersetzung. Gewöhn Dir das besser ab.
kann_man_machen
User
Beiträge: 3
Registriert: Dienstag 4. April 2017, 15:45

ok, ich habe jetzt die line

Code: Alles auswählen

user_auslese = user_auslese[0:-1]

hinzugefügt nachdem ich die erste Zeile der Datei auslese.
So wird das "\n" entfernt und es funktioniert wie ich es mir vorgestellt habe. Danke, dafür.
Ich kann mir allerdings nicht so recht vorstellen, dass das die Methode ist mit der man es "richtig macht". Es gibt doch sicherlich eine elegantere Methode? Zum Beispiel eine schreib-methode mit der man ohne \n in die nächste Zeile schreiben kann?

In der Text Datei taucht das \n bei mir auch nicht auf, dort steht nur in der ersten Zeile meine (user) Eingabe und in der zweiten Zeile meine (password) Eingabe.

Kannst du mir das mit den Klammern noch kurz erläutern - Welche sind überflüßig?

Ich benutze python 3.6.1 falls das relevant sein sollte.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Und du machst Leerzeichen, wo keine hingehören. Eine verbesserte Version

Code: Alles auswählen

user = input("User: ")
password = input("Password: ")
 
with open("password_liste.txt", "w") as f:  
    f.write(user + '\n')   # Username in erste Zeile schreiben
    f.write(password + '\n')   # Password in zweite Zeile schreiben
 
print("Account wurde angelegt mit Benutzername: {} und Password: {}".format(user, password))
 
print("Login")
 
user = input("User: ")
password = input("Password: ")
 
datei_in = open("password_liste.txt").readlines()
user_name = datei_in[0].strip("\n")
user_password = datei_in[1].strip("\n")
 
if user == user_name and password == user_password :
    print("Login erfolgreich")
else:
    print("Benutzername/Password falsch")
BTW: Du vermengst Englisch und Deutsch (mache ich auch manchmal).
BlackJack

@kann_man_machen: Das '\n' taucht bei Dir in der Textdatei auf. Da steht nicht '\n' denn das wären ja die beiden Zeichen '\' und 'n', aber der Texteditor fängt eine neue Zeile an. Das ist das '\n'. Die meisten Editoren kann man auch so einstellen, das sie Leerzeichen, Tabulatoren, und Zeilenenden irgendwie sichtbar machen. Zeilenenden dann häufig mit dem Absatzzeichen (¶) angezeigt.
kann_man_machen
User
Beiträge: 3
Registriert: Dienstag 4. April 2017, 15:45

@BlackJack, das mit dem \n in der Text datei habe ich jetzt verstanden, hatte da nicht die richtige Denkweise :)
@pixewakb Den strip Befehl kannte ich noch nicht, danke dafür
Antworten