Как сравнить данные из текстового файла с вводом данных на 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

У вас две ошибки:

  1. login_username перезаписывается строками из файла, ввод от пользователя использован не будет
  2. Если часть файла выглядит так (наверное):
login_username: Maria 
login_password: flora

То login_username.split() будет равен такому: ["login_username:", "Maria"], сравнение будет неверным.

Как исправить:

  1. Выбрать другие имена для переменных ввода (вроде очевидно)
  2. Взять второй элемент из массива от 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:

ваш логин
ваш пароль

Обьяснение вашей проблемы:

  1. вы используете тоже самое имя переменной при вводе через input и при чтении файла
  2. в login_username вы используете split() - Это не надо (split возвращает список)
  3. нет проверки на пароль
→ Ссылка