обновленный словарь не может распознать вновь добавленный ключ при повторном выполнении программы

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

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

password = {
    'a': 'password of a',
    'b': 'password of b',
    'c': 'password of c'
}

inp = input("Enter the username ")

if inp in password:
    print("your password is ",password[inp])

else:
   print("your account is not present\n")
   new_password = input("Enter the password for ")
   password.update({inp : new_password})
   print("Hopefully the list is updated ",password)

напр. если мой inp = d, он скажет мне, что учетной записи нет, а затем запросит ввод, это показывает, что словарь обновлен

{'a': 'a ka password', 'b': 'b ka password', 'c': 'c ka password', 'd': 'password of d'}

но в следующий раз, когда я запускаю программу, она не распознается.

Enter the username d
your account is not present

person Gaurav Bahadur    schedule 21.10.2018    source источник
comment
что ты имеешь в виду в следующий раз? как в следующий раз, когда вы запустите скрипт в консоли/терминале/командной строке, например python password.py? каждый раз, когда скрипт завершается и возвращается к командной строке, все в вашем ранее запущенном скрипте уничтожается.   -  person deadvoid    schedule 21.10.2018


Ответы (2)


Это потому, что ваш словарь с учетными записями находится в памяти только во время работы программы. Как только он заканчивается, словарь исчезает и создается с нуля, когда вы снова запускаете свою программу. Вам нужно сохранить его на диск, чтобы сохранить ваши обновления, и один из подходов — использовать pickle< /а>:

init_accounts.py

import pickle

password = {
    'a': 'password of a',
    'b': 'password of b',
    'c': 'password of c'
}

# SAVE THE DATA
with open("data.pickle", "wb") as file:
    pickle.dump(password, file, pickle.HIGHEST_PROTOCOL)

add_account.py

import pickle

# LOAD THE DATA
with open("data.pickle", "rb") as file:
    password = pickle.load(file)

inp = input("Enter the username ")

if inp in password:
    print("your password is ", password[inp])

else:
    print("your account is not present\n")
    new_password = input("Enter the password for ")
    password.update({inp : new_password})

    # SAVE THE DATA
    with open("data.pickle", "wb") as file:
        pickle.dump(password, file, pickle.HIGHEST_PROTOCOL)

    print("Hopefully the list is updated ", password)
person Edgar Ramírez Mondragón    schedule 21.10.2018

Если я что-то не упустил, вы не можете хранить данные таким образом. Как только вы завершите сценарий/закроете программу, пользовательский ввод будет потерян. Одним из способов хранения данных было бы хранение словаря в другом файле, чтение и запись в него.

person rushinstuffin    schedule 21.10.2018