Как сравнить данные из текстового файла с вводом данных на Python?
Как сравнить логин/пароль из текстового файла c тем, что вводит пользователь?
Текстовый файл:
login_username: Maria
login_password: flora
Мой код:
login_username = input("Please enter your username:")
login_password = input("Please enter your password:")
with open('pass.txt', 'r') as f:
login_username = f.readline()
login_password = f.readline()
if login_username == login_username.split():
print("все верно")
else:
print("incorrect username / password, please try again")
Ответы (3 шт):
Автор решения: Damir Hakimof
→ Ссылка
main.py
login_username_io = input("Please enter your username: ")
login_password_io = input("Please enter your password: ")
with open('pass.txt', 'r') as f:
lines = f.readlines()
if len(lines) >= 2:
login_username = lines[0].strip().split(' ')[1]
login_password = lines[1].strip().split(' ')[1]
print(f"{login_username} and {login_username_io}")
if login_username_io == login_username and login_password_io == login_password:
print("OK")
else:
print("Invalid password or username")
else:
print("Some data not found")
Где pass.txt:
login_username: Maria
login_password: flora
Автор решения: SurfaceStack
→ Ссылка
У вас две ошибки:
login_usernameперезаписывается строками из файла, ввод от пользователя использован не будет- Если часть файла выглядит так (наверное):
login_username: Maria
login_password: flora
То login_username.split() будет равен такому: ["login_username:", "Maria"], сравнение будет неверным.
Как исправить:
- Выбрать другие имена для переменных ввода (вроде очевидно)
- Взять второй элемент из массива от
split():login_username.split()[1], в примере, который я использовал - "Maria"
Код с исправлениями:
input1 = input("Please enter your username:")
input2 = input("Please enter your password:")
with open('pass.txt', 'r') as f:
login_username = f.readline()
login_password = f.readline()
if input1 == login_username.split()[1]:
print("все верно")
else:
print("incorrect username / password, please try again")
# с паролем аналогично
Автор решения: CodeFlame
→ Ссылка
лучше используйте json вместо текстового файла:
from json import load
login_username = input("Please enter your username:")
login_password = input("Please enter your password:")
file_data = {}
with open('pass.json', 'r') as f:
file_data = load(f)
if file_data['password'] == login_password and file_data['username'] == login_username:
print("все верно")
else:
print("incorrect username / password, please try again")
при этом json файл должен выглядеть так:
{'username': 'ваше имя пользователя', 'password': 'ваш пароль'}
Если вам интересен только вариант с текстовым файлом:
login_username = input("Please enter your username:")
login_password = input("Please enter your password:")
with open('pass.txt', 'r') as f:
txt_username = f.readline().rstrip('\n') #rstrip нужен для того чтобы убрать символ новой строки
txt_password = f.readline()
if txt_username == login_username and txt_password == login_password:
print("все верно")
else:
print("incorrect username / password, please try again")
pass.txt:
ваш логин
ваш пароль
Обьяснение вашей проблемы:
- вы используете тоже самое имя переменной при вводе через input и при чтении файла
- в login_username вы используете split() - Это не надо (split возвращает список)
- нет проверки на пароль