2017-01-03 8 views
0

Ich habe einen Code, wo ich eine E-Mail und ein Passwort in einer Textdatei in einer Liste haben, formatiert wie folgt: ["[email protected]","Password1"],["[email protected]","Password2].Python liest nicht korrekt aus einer Textdatei?

Mein Code liest aus der Textdatei und vergleicht sie mit einer Benutzereingabe, um festzustellen, ob sie in der Textdatei vorhanden ist. Aus irgendeinem Grund, wenn ich die erste E-Mail eingeben "[email protected]" liest es aus der Textdatei, aber nicht "Password1", aber es liest "[email protected]" korrekt sowie "Password2" korrekt. Ich kann keinen Weg finden, um dies zu umgehen und das zu beheben? Es wird kein Fehler empfangen, daher bin ich mir nicht sicher, wo es falsch läuft. Hier ist mein Code:

def Login(): 
    with open("logindata.txt","r") as file: 
     for line in file: 
      line=line.split(",") 
      logindata.append([line[0],line[1].rstrip()]) 
     print(logindata) 
    found=False 
    while found == False: 
     email=input("Enter email:") 
     password=input("Enter password:") 
     with open("logindata.txt","r")as file: 
      for line in file: 
       line = line.split(",") 
       if email in line: 
        print("Correct email") 
       if password in line: 
        print("Correct Password") 
        found=True 
if __name__ == "__main__": 
Login() 

, wenn der Code ausgeführt wird und Sie versuchen, die Eingänge I am Anfang gab dann nur die zweite E-Mail und Passwort-Kombination funktioniert. Hier ist, was die Textdatei wie text file format

Anfügen aussieht:

username=input("Enter a new email") 
     password=input("Enter a password") 
     with open('logindata.txt','a')as file: 
      line='\n'+ username + ',' + password 
      file.write(line) 
     print("user added") 
+0

Sie haben vergessen, die zu entfernen Neue Zeile; 'password' ist nicht in der Zeile,' password \ n' ist. –

+0

@MartijnPieters Entschuldigung, dass ich darauf zurückkommen möchte, aber wenn ich eine neue E-Mail an die Textdatei anhängen möchte, muss das \ n am Ende des Passworts sein, um es in die nächste Zeile zu bekommen. Wie würde ich das erreichen? – Tom

+0

Der beste Weg: Verwenden Sie 'csv.writer()', um die Datei zu schreiben. Jedes Mal, wenn Sie die Methode 'writerow()' verwenden, fügt sie den Zeilenumbruch für Sie hinzu. Andernfalls fügen Sie es beim Schreiben manuell hinzu; 'fileobj.write ('{}, {} \ n'.format (Benutzer-ID, Passwort))', zum Beispiel. –

Antwort

2

Sie lesen sind Text mit Zeilenseparatoren. Ihre Linien sehen nicht so:

[email protected],Password1 

Sie sehen tatsächlich wie folgt aus:

[email protected],Password1\n 

Wenn das auf dem Komma Aufspalten Sie diese:

line = ['[email protected]', 'Password1\n'] 

und den Test 'Password1' in line schlägt fehl, aber 'Password1\n' in der Zeile wäre erfolgreich.

Die \n ist ein Newline-Zeichen. Du musst das zuerst entfernen. Sie könnten str.strip() verwenden handlichen alle Leerzeichen am Anfang und am Ende zu entfernen:

for line in file: 
    line = line.strip().split(",") 
    if email in line: 
     print("Correct email") 
    if password in line: 
     print("Correct Password") 

Anstatt manuell aufgeteilt, können Sie die csv module lesen Ihre Datei:

import csv 

with open("logindata.txt", "r") as file: 
    reader = csv.reader(file) 
    for user, pw in reader: 
     if email == user: 
      print("Correct email") 
     if password == pw: 
      print("Correct Password") 
Verwandte Themen