Изменение элемента в списке с помощью текстового документа - PullRequest
1 голос
/ 19 февраля 2020

У меня проблема в том, что я запускаю функцию, которая должна проверять строки в текстовом документе, находить совпадающее имя пользователя и помещать 2-й синтем в списке с каждой строкой (это программа сброса пароля). Текстовый документ обычно выглядит так:

test test
username password
hello hi

Это код, который я пробовал. reset_username было принято при входе в систему. (Я также включил функцию входа в систему, например)

функция смены пароля:

def password_change():
    for _ in open('info.txt', 'r').readlines():
        login_info = _.split()
        if reset_username == login_info[0]:
            login_info[1] = [password_reenter_txt.get()]
            menu_window()

Функция входа:

def txt_file_log_in():

    try:
        for _ in open('info.txt', 'r').readlines():
            login_info = _.split() #split on the space made and store result with 2 strings
            if username_enter_txt.get() == login_info[0] and password_enter_txt.get() == login_info[1]:
                password_fault_report.configure(text='User name and Password Correct')

                global reset_username
                reset_username = username_enter_txt.get()

                messagebox.showinfo('Success', 'You have successfully logged in!')#pop up window informing user for sign up.
                login_window.destroy()
                final_window()

        password_fault_report.configure(text='User name or password incorrect,')

    except:
        password_fault_report.configure(text='No accounts found, you need to sign in first...')

У меня ошибка в том, что он запустит функцию и запустит окно меню, однако это не изменит документ вообще.

Я новичок в ТК, python, так что это может быть очень глупая ошибка, извините. Также, если iv'e допустил ошибку в сообщении, также дайте мне знать:)

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Значение 'r' в открытом операторе позволяет вам "ТОЛЬКО ЧИТАТЬ" файл. Для записи в файл, который вы хотите использовать 'w', но имейте в виду, что он запишет файл и удалит все, что было там раньше, поэтому мы хотим убедиться, что мы записали все обратно в файл.

Мы можем выполнить это sh, используя список для хранения всех значений и обновляя их по мере необходимости.

Пример кода:

def password_change(reset_username, password_reenter_txt):
    # Create empty list to hold file data.
    login_info = []
    with open('some_file', 'r') as data:
        for _ in data.readlines():
            login_info.append(_.split())
    print(login_info)
    # Check values in list and update if condition true.
    for sub_list in login_info:
        if len(sub_list) > 0:
            if reset_username == sub_list[0]:
                sub_list[1] = password_reenter_txt

    # write new values of list to file if previous condition met.
    with open('some_file', 'w') as data:
        for sub_list in login_info:
            if len(sub_list) > 0:
                data.write('{} {}\n'.format(sub_list[0], sub_list[1]))


for i in range(9):
    password_change('name' + str(i+1), 'pass')

# Check new values in file.
with open('some_file', 'r') as data:
    for _ in data.readlines():
        print(_.strip('\n'))

Используемые данные тестового файла:

name1 pass1
name2 pass1
name3 pass1
name4 pass1
name5 pass1
name6 pass1
name7 pass1
name8 pass1
name9 pass1

Результаты:

name1 new_pass
name2 new_pass
name3 new_pass
name4 new_pass
name5 new_pass
name6 new_pass
name7 new_pass
name8 new_pass
name9 new_pass
0 голосов
/ 19 февраля 2020

Вы читаете данные из файла, затем изменяете данные в памяти , но никогда не записываете их обратно в файл.

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