Пример для наглядности:
>>>db = shelve.open(os.path.join(user_profiles, 'accounts_db')) >>>accounts = dict() >>>for x in db.keys(): accounts[x] = db[x] >>>db.close() >>>print(accounts) {'Max': {'Valuators': {'Insval': {'Comments': {'Comment 1': 'Max comment 1'}}}}, 'Den': {'Valuators': {'Insval': {'Comments': {'Comment 1': 'Den comment 1'}}}}}
Дальше я провожу манипуляции с аккаунтами и хочу записать их обратно в базу
>>>accounts['Max']['Valuators']['Insval']['Comments']['Comment 2'] = 'MAX COMMENT 2' >>>db = shelve.open(os.path.join(user_profiles, 'accounts_db')) >>>db['Max']['Valuators']['Insval']['Comments'] = accounts['Max']['Valuators']['Insval']['Comments'] >>>db.close()
И при повторном чтении из файла получаю следующие
>>>db = shelve.open(os.path.join(user_profiles, 'accounts_db')) >>>print(db['Max']['Valuators']['Insval']['Comments']) {'Comment 1': 'Max comment 1'} >>>db.close()
Значения обновятся только после перезапуска утилиты. Зато вариант ниже, приводит к тому что значения обновляются сразу.
>>>db = shelve.open(os.path.join(user_profiles, 'accounts_db')) >>>for x in accounts.keys(): try: db[x] = accounts[x].rstrip() except AttributeError: db[x] = accounts[x] >>>db.close() >>> >>> >>>db = shelve.open(os.path.join(user_profiles, 'accounts_db')) >>>print(db['Max']['Valuators']['Insval']['Comments']) {'Comment 1': 'Max comment 1', 'Comment 2': 'MAX COMMENT 2'} >>>db.close()
Из-за чего это происходит ? Ошибок никаких не возникает.