Как ссылаться на текстовый файл в python - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь создать python программу, которая имитирует логин. Цель программы - написать, затем прочитать текстовый файл, чтобы увидеть, совпадают ли имя пользователя (имя_пользователя) и пароль (пароль), а затем войти в систему !. Моя проблема в том, что он не читает файл, и когда он записывает его в одну строку , например, вывод в мой текстовый файл - usernameusernameusername, я не уверен, что это портит программу при чтении, если имя пользователя уже есть существует.

 info = open("user_info.txt", "a+")
user_status = input("Are you a new user (Y)es or (N)o")
if user_status.lower() == ("y"):
    print("Welcome To Login Master 1000")
    user_name = input("Type in user name")
    if str(user_name) in info.readlines():
        print("That Name Is Taken")
    info.write(user_name) 

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Здесь есть пара вопросов. Во-первых, вы не можете прочитать файл, потому что вы открываете его с a+, и поэтому вы читаете с последней строки, поэтому вместо этого вы должны добавить:

info.seek(0)

Я бы также предложил добавить ,, чтобы убедиться, что имена не смешиваются:

info.write(f"{user_name},") 

Наконец, я бы предложил открыть файл с помощью оператора with, чтобы случайно не оставить его открытым:

with open("user_info.txt", "a+") as info:

Собираем все вместе:

with open("user_info.txt", "a+") as info:
    info.seek(0)
    user_status = input("Are you a new user (Y)es or (N)o")
    if user_status.lower() == ("y"):
        print("Welcome To Login Master 1000")
        user_name = input("Type in user name")
        if str(user_name) in info.read().split(','):
            print("That Name Is Taken")
        info.write(f"{user_name},")
0 голосов
/ 01 февраля 2020

Отличное начало вашей программы. Пара вещей здесь ... когда вы вручную открываете файлы для модификации, вы должны вручную закрыть файл в конце вашей программы с помощью info.close().

Решение о том, как хранить ваши данные в файле, было изменено с момента появления компьютеров. Для простоты и обучения вы можете просто сохранить свои имена пользователей и пароли в файле, разделенном запятыми, .csv или в файле, разделенном пробелами. Это позволит вам прочитать строку и затем разбить ее на отдельные строки для тестирования.

При записи в файл я считаю, что вы можете добавлять строки с помощью оператора +. Таким образом, чтобы создать разделенный пробелами файл, вы можете info.write(user_name+“,”+”password”+”\n”). Теперь у вас есть запятая для разделения и только один пользователь и пароль, сохраненные в вашем файле на строку.

Возможно, ваш файл уже читает. Чтобы увидеть, читается ли файл, перед оператором if попробуйте print(“Current line is -> “,info.readline()), поскольку readline прочитает только одну строку.

Если файл не читается, или в этом отпечатке нет содержимого, или вы получаете сообщение об ошибке, это может быть разрешение для вашего файла или его просто необходимо указать в опции a+ изменилось.

Далее ключевое слово in не проверяет содержимое, как вы и предполагали, хотя это хорошая идея.
in лучше использовать для итерации каждой строки файла for line in info: Print(info.readline()) Преимущество этого метода в том, что вы можете разделить имя пользователя и пароль каждой строки на список с разделением. Итак ->

For line in info:
    Print(line)
    Tokens = line.split(“,”) # if comma separated
    If user_name == tokens[0]:
        #Matched input username with file content

Теперь, когда вы печатаете токены, у вас будет список через запятую, похожий на [“Username”,”password”], а затем вы можете получить доступ к ”Username” с помощью Tokens[0] и вы можете получить доступ к ”password” с помощью Tokens[1] потому что индексирование списка начинается с 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...