Обновить ключи и значения словаря - PullRequest
0 голосов
/ 10 октября 2018

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

#! python3
# pw.py - An insecure password locker program.

PASSWORDS = {'email': 'F7minlBDDuvMJuxESSKHFhTxFtjVB6',
             'blog': 'VmALvQyKAxiVH5G8v01if1MLZF3sdt',
             'luggage': '12345'}

import sys
if len(sys.argv) < 2:
    print('Usage: python pw.py [account] - copy account password')
    sys.exit()

account = sys.argv[1]      # first command line arg is the account name
if account in PASSWORDS:
    pyperclip.copy(PASSWORDS[account])
    print('Password for ' + account + ' copied to clipboard.')
else:
    print('There is no account named ' + account)

Это код.Поэтому я подумал о том, как обновить словарь PASSWORDS новой информацией, если учетная запись ранее отсутствовала.Поэтому я добавил эти строки кода в оператор else

    print('Input the password for the said account to update the info.')
    PASSWORDS[account] = input()
    print('Info updated!')

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

1 Ответ

0 голосов
/ 10 октября 2018

Управление паролями всегда очень деликатная тема, но, поскольку вы только начинаете и не спрашиваете о безопасности, давайте посмотрим, как мы можем загрузить и написать простой файл JSON очень простым способом.

Сначала давайте перенесем фактические данные в отдельный файл, который мы можем назвать как database.json:

{"email": "F7minlBDDuvMJuxESSKHFhTxFtjVB6",
 "blog": "VmALvQyKAxiVH5G8v01if1MLZF3sdt",
 "luggage": "12345"}

Затем мы изменим код приложения следующим образом:

#!/usr/env python3
"""
 pw.py - An insecure password locker program.
"""
import sys
import pyperclip
import json
import os


# The path to the database file
DB_FILE = "~/Desktop/database.json"


def main():
    if len(sys.argv) < 2:
        print('Usage: python pw.py [account] - copy account password')
        sys.exit()

    account = sys.argv[1]      # first command line arg is the account name
    db = os.path.expanduser(DB_FILE)
    with open(db) as f:
        data = json.load(f)  # Load a dictionary for disk

    if account in data:
        pyperclip.copy(data[account])
        print('Password for ' + account + ' copied to clipboard.')
    else:
        print('There is no account named ' + account)
        print('Input the password for the said account to update the info.')
        new_passwd = {account: input()}  # create a dictionary with the new account data
        data.update(new_passwd)  # update the main dictionary with the new data

        with open(db, 'w') as f:
            json.dump(data, f)  # convert to JSON and write to disk

        print('Info updated!')


if __name__ == "__main__":
    main()

Для такой простой задачи есть несколько форматов файлов, которые вы можете использовать.JSON - это формат, который отображается в словари Python логичным и простым для понимания способом, но вы также можете реализовать его в CSV, не добавляя особых сложностей.Но в таких приложениях вы очень скоро почувствуете необходимость чего-то более практичного и надежного.Например, по мере роста вашей базы данных может оказаться нецелесообразным загружать всю базу данных в память.И это может вызвать еще больше проблем с безопасностью.

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

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