Eu preciso para salvar no disco um pouco dict
objeto cujas chaves são do tipo str
e os valores são int
s e depois recuperá-lo . Algo assim:
{'juanjo': 2, 'pedro':99, 'other': 333}
Qual é a melhor opção e por quê? Serializar com pickle
ou com simplejson
?
Estou usando o Python 2.6.
simplejson
, usaria ojson
módulo embutido (que tem exatamente a mesma interface).Respostas:
Se você não tem nenhum requisito de interoperabilidade (por exemplo, você vai apenas usar os dados com Python) e um formato binário está bom, vá com cPickle que fornece serialização de objetos Python muito rápida.
Se você deseja interoperabilidade ou um formato de texto para armazenar seus dados, use JSON (ou algum outro formato apropriado, dependendo de suas restrições).
fonte
cPickle
(orpickle
) based on your premises over JSON. When I first read your answer I thought the reason might have been speed, but since this is not the case... :)Eu prefiro JSON em vez de pickle para minha serialização. O Unpickling pode executar código arbitrário e usar
pickle
para transferir dados entre programas ou armazenar dados entre sessões é uma falha de segurança. JSON não apresenta uma falha de segurança e é padronizado, portanto, os dados podem ser acessados por programas em diferentes linguagens se você precisar.fonte
Você também pode achar isso interessante, com alguns gráficos para comparar: http://kovshenin.com/archives/pickle-vs-json-which-is-faster/
fonte
pickle
batejson
naint
,str
efloat
.Se você está preocupado principalmente com velocidade e espaço, use cPickle porque cPickle é mais rápido que JSON.
Se você está mais preocupado com interoperabilidade, segurança e / ou legibilidade humana, use JSON.
Os resultados dos testes referenciados em outras respostas foram registrados em 2010, e os testes atualizados em 2016 com protocolo cPickle 2 mostram:
Reproduza você mesmo com esta essência , que é baseada no benchmark de Konstantin referenciado em outras respostas, mas usando cPickle com protocolo 2 em vez de pickle, e usando json em vez de simplejson (já que json é mais rápido que simplejson ), por exemplo,
Resultados com o python 2.7 em um processador Xeon 2015 decente:
Python 3.4 com protocolo pickle 3 é ainda mais rápido.
fonte
JSON ou picles? Que tal JSON e pickle! Você pode usar
jsonpickle
. É fácil de usar e o arquivo no disco é legível porque é JSON.http://jsonpickle.github.com/
fonte
Eu tentei vários métodos e descobri que usar cPickle com a configuração do argumento de protocolo do método de despejo como:
cPickle.dumps(obj, protocol=cPickle.HIGHEST_PROTOCOL)
é o método de despejo mais rápido.Resultado:
fonte
Pessoalmente, geralmente prefiro JSON porque os dados são legíveis por humanos . Definitivamente, se você precisar serializar algo que JSON não aceita, use pickle.
Mas para a maioria do armazenamento de dados, você não precisa serializar nada estranho e JSON é muito mais fácil e sempre permite que você o abra em um editor de texto e verifique os dados você mesmo.
A velocidade é boa, mas para a maioria dos conjuntos de dados a diferença é insignificante; Python geralmente não é muito rápido de qualquer maneira.
fonte
pickle
é duas vezes mais rápido quejson
.100
elementos de uma lista, a diferença é completamente desprezível ao olho humano. Definitivamente diferente ao trabalhar com conjuntos de dados maiores.