Я пишу программу, которая хранит данные в объекте словаря, но эти данные необходимо сохранить в определенный момент во время выполнения программы и загрузить обратно в объект словаря при повторном запуске программы. Как бы я преобразовал объект словаря в строку, которую можно записать в файл и загрузить обратно в объект словаря? Надеемся, что это будет поддерживать словари, содержащие словари.
python
json
dictionary
serialization
AJ00200
источник
источник
import json
как я!Если ваш словарь не слишком большой, возможно, сработает str + eval:
Вы можете использовать ast.literal_eval вместо eval для дополнительной безопасности, если источник не заслуживает доверия.
источник
Я использую
json
:источник
Используйте
pickle
модуль, чтобы сохранить его на диск и загрузить позже.источник
Почему бы не использовать встроенные в Python 3 Аст функции библиотеки literal_eval . Лучше использовать literal_eval вместо eval
выдаст вывод как фактический словарь
И если вы просите преобразовать словарь в строку , как насчет использования str () метода Python.
Предположим, словарь:
И это будет сделано так:
Напечатает:
Это легко, как вам нравится.
источник
Если в китайцах
источник
Преобразовать словарь в JSON (строка)
получит вас:
Конвертировать строку в словарь
источник
Я думаю, вы должны рассмотреть возможность использования
shelve
модуля, который обеспечивает постоянные файловые объекты словаря. Его легко использовать вместо «реального» словаря, потому что он почти прозрачно обеспечивает вашу программу чем-то, что можно использовать так же, как словарь, без необходимости явно преобразовывать его в строку и затем записывать в файл (или наоборот). Versa).Основное различие заключается в том, что сначала необходимо выполнить
open()
его перед первым использованием, а затем -close()
после завершения (и, возможноsync()
, в зависимости отwriteback
параметра). Любой созданный файловый объект «полка» может содержать в качестве значений обычные словари, что позволяет им быть логически вложенными.Вот тривиальный пример:
Вывод:
источник
Если вам важна скорость, используйте ujson (UltraJSON), который имеет тот же API, что и json:
источник
Я использую yaml для этого, если он должен быть читаемым (ни JSON, ни XML не являются этим ИМХО), либо если чтение не нужно, я использую pickle
Напишите
Читать назад
источник
b
флаг при открытии файла здесь.dumps()
умолчанию используется протокол 0, который является протоколом ascii. Именно поэтому'rb'
ИМХО не нужно.