Как сделать изменения в словаре постоянными? - PullRequest
0 голосов
/ 13 января 2019

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

Ниже фрагмент просит пользователя предоставить новые значения для dict, а затем обновляет его.

baseDict={'a':10, 'b':20, 'c':30, 'd':40}
def updateDict(key, value):
    temp = {key : value}
    baseDict.update(temp)
    return baseDict

key = str(input('Enter key\n'))
value = input('Enter value\n')
baseDict = updateDict(key, value)

Проблема в том, что при перезапуске оболочки baseDict возвращается к исходным значениям.
Я нашел решения для аналогичного вопроса из ~ 2010, но они используют Pickle, shelve, JSON для хранения / извлечения dict в отдельном файле и загружают его каждый раз, когда выполняется код.

Я планирую превратить код в небольшой файл .exe для запуска на компьютере без py. Будем весьма благодарны за любые предложения о том, как сделать baseDict обновленным в такой среде.

Спасибо!

Ответы [ 3 ]

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

Как я знаю, единственный способ сохранить изменения такого рода - использовать локальное хранилище. Это может быть с Jsons, текстовыми файлами, базами данных, даже вы можете создать свой собственный кодированный тип файла. Тем не менее, большинство приложений необходимо установить, возможно, на ваш выбор может быть запись ваших данных и сохранение их в секретных файлах в каталоге, который приложение создает в процессе установки.

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

Использование json или pickle лучше, чем сохранение открытого текста и ast.literal_eval в нем. Я бы порекомендовал json:

Для json, сначала запустите это один раз:

import json

with open('baseDict.json', 'w') as f:
    json.dump({'a':10, 'b':20, 'c':30, 'd':40}, f)

Тогда:

import json

with open('baseDict.json','r') as f:
    baseDict = json.load(f)

# your code

with open('baseDict.json', 'w') as f:
    json.dump(baseDict, f)

См. здесь , почему json лучше, чем ast.literal_eval.

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

Вы можете сохранить его в txt, а затем загрузить обратно.

Запустите код самостоятельно, как показано ниже:

with open('test.txt','w') as f:
    f.write("{'a':10, 'b':20, 'c':30, 'd':40}")

Затем запустите другой модуль с кодом ниже:

import ast
with open('test.txt','r') as f:
    baseDict=ast.literal_eval(f.read().rstrip())

def updateDict(key, value):
    temp = {key : value}
    baseDict.update(temp)
    return baseDict

key = str(input('Enter key\n'))
value = input('Enter value\n')
baseDict = updateDict(key, value)
with open('test.txt','w') as f:
    f.write(str(baseDict))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...