Estou escrevendo um programa que armazena dados em um objeto de dicionário, mas esses dados precisam ser salvos em algum momento durante a execução do programa e carregados de volta no objeto de dicionário quando o programa é executado novamente. Como converter um objeto de dicionário em uma sequência que pode ser gravada em um arquivo e carregada de volta em um objeto de dicionário? Esperamos que isso suporte dicionários que contenham dicionários.
python
json
dictionary
serialization
AJ00200
fonte
fonte
import json
que eu fiz!Se o seu dicionário não for muito grande, talvez o str + eval possa fazer o trabalho:
Você pode usar ast.literal_eval em vez de eval para obter segurança adicional se a fonte não for confiável.
fonte
Eu uso
json
:fonte
Use o
pickle
módulo para salvá-lo no disco e carregar posteriormente.fonte
Por que não usar a função da biblioteca embutida ast do Python 3 literal_eval . É melhor usar literal_eval em vez de eval
dará saída como dicionário real
E se você está pedindo para converter um dicionário em uma string , que tal usar o método str () do Python?
Suponha que o dicionário seja:
E isso será feito assim:
Irá imprimir:
Este é o mais fácil que você quiser.
fonte
Se em Chinses
fonte
Converter dicionário em JSON (string)
você receberá:
Converter string em dicionário
fonte
Eu acho que você deve considerar o uso do
shelve
módulo que fornece objetos semelhantes a dicionários, baseados em arquivos persistentes. É fácil de usar no lugar de um dicionário "real" porque fornece de maneira quase transparente ao programa algo que pode ser usado como um dicionário, sem a necessidade de convertê-lo explicitamente em uma string e depois gravar em um arquivo (ou vice-versa). versa).A principal diferença é a necessidade de inicializá-
open()
lo antes do primeiro uso e depoisclose()
quando você terminar (e possivelmente usásync()
-lo, dependendo dawriteback
opção que está sendo usada). Qualquer objeto de arquivo "prateleira" criado pode conter dicionários regulares como valores, permitindo que sejam aninhados logicamente.Aqui está um exemplo trivial:
Resultado:
fonte
Se você se preocupa com a velocidade, use ujson (UltraJSON), que possui a mesma API do json:
fonte
Eu uso o yaml para isso, se precisar ser legível (nem JSON nem XML são IMHO), ou se a leitura não for necessária, uso pickle.
Escrever
Leia de volta
fonte
b
sinalizador ao abrir o arquivo aqui.dumps()
padrão é o protocolo 0, que é um protocolo ascii. É por isso que'rb'
não é necessário IMHO.