0

I have a code where I have an email and a password in a text file in a list, formatted like this: ["[email protected]","Password1"],["[email protected]","Password2].

My code reads from the text file and compares it with a user input to see if it is present in the text file. For some reason when I input the first email "[email protected]" it reads that from the text file but not "Password1", however it reads "[email protected]" correctly as well as "Password2" correctly. I cant find any way to get around this and fix this? No error is received so I'm not sure where its going wrong. Here is my 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()

if the code is run and you try the inputs I gave at the start then only the second email and password combination works. Here is what the text file looks like text file format

Appending:

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")
4
  • You forgot to remove the newline; password is not in the line, password\n is. Commented Jan 3, 2017 at 17:19
  • @MartijnPieters Sorry to come back to this but if I want to append a new email to the text file , I need the \n to be at the end of the password to get it onto the next line so how would I achieve this? Commented Jan 3, 2017 at 19:01
  • Best way: use csv.writer() to write the file. Each time you use the writerow() method on that it'll add the newline for you. Otherwise, add it manually when writing; fileobj.write('{},{}\n'.format(userid, password)), for example. Commented Jan 3, 2017 at 19:02
  • @MartijnPieters I kind of want to stay away from csv and write, im not that familiar with them. I tried this which should work surely as its just adding a line before the username but it ends up putting the data two lines below instead of directly Commented Jan 3, 2017 at 19:30

1 Answer 1

2

You are reading text with line separators. Your lines don't look like this:

[email protected],Password1

They actually look like this:

[email protected],Password1\n

When splitting that on the comma, you get this:

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

and the test 'Password1' in line fails, but 'Password1\n' in line would succeed.

The \n is a newline character. You'd need to remove that first; you could use str.strip() to handily remove all whitespace from the start and end:

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

Rather than manually split, you can use the csv module to read your file:

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")
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.