проблема чтения файла с именем пользователя Python и системой восстановления passowrd - PullRequest
0 голосов
/ 24 января 2019

Это система восстановления, в которой пользователь вводит свой уникальный код для восстановления своих данных.когда вводится уникальный код, он берет их данные из текстового файла, а затем печатает их имя пользователя и пароль.Затем им предоставляется возможность сменить пароль.Проблема, которая у меня есть, заключается в том, что когда я набираю старый пароль, он говорит, что пароль не находится в этой конкретной строке.Формат в файле такой:

(unique code) username: (username) password: (password)

global password1, password2,
check = True
while check:
    hash1=input("\n"+"Enter your unique code to recover your username or password ")
    with open("mount.txt","r") as file:
        for line in file:
            text = line.strip().split()
            if hash1 in text:
                print(line)
                check = False
                change = input("Do you want to change your password? [y,n]")
                while change not in('y', 'n'):
                    change = input("Do you want to change your password? [y,n]")
                if change == "y":
                    check = True
                    with open("mount.txt","r+") as file:
                        for line in file:
                            text = line.strip().split()
                            while check:
                                password1 = input("Enter old password ")
                                password2 = input("Enter new password ")
                                if len(password2) < 5:
                                    print("New password is too short")
                                elif password1 not in text:
                                    print("Old password is incorrect")
                                elif password1 in text:       
                                    s = open("mount.txt").read()
                                    s = s.replace(password1, password2)
                                    f = open("mount.txt", 'w')
                                    f.write(s)
                                    f.close()
                                    print("Password has been successfully changed")
                                    check = False

            elif len(hash1) < 32 and (check == True):
                print("Unique code not found please try again")
                break

Поэтому, когда я ввожу уникальный код, он показывает правильную строку, а когда я пытаюсь изменить пароль, он продолжает говорить, чтопароль не указан в этой конкретной строке.

1 Ответ

0 голосов
/ 24 января 2019

В настоящее время, при циклическом просмотре строк в текстовом файле, если hash1 не находится в ЛЮБОЙ строке, он сообщит вам, что код не найден, и сразу же прекратит работу.

Чтобы это исправить, вы должны прервать или вернуться изнутри вашего условного if hash1 in text, затем протестировать if len(hash1) < 32 and (check == True), который теперь будет запускаться только ПОСЛЕ проверки всех строк в файле.

Кроме того, предположим, что текст «aslhngbadf username: bob password: alice», line.strip().split() будет ['aslhngbadf', 'username:', 'bob', 'password:', 'alice'], поэтому проверка того, что password1 находится в text, не будет работать для одной буквы пароля. Однако это сработает, если вы введете слово «пароль:» или «боб» ..., проверьте, чтобы все совпадало явно, например if password1 == text[4].

Наконец, когда вы снова открываете файл и повторяете его над файлом, вы переходите от строки, где ваш текст совпал, к началу файла. Не открывайте mount.txt дважды. text по-прежнему остается доступным и неизменным с момента первой установки.

...