Reputation: 21
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")
Upvotes: 0
Views: 2259
Reputation: 1121386
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")
Upvotes: 2