Je dois enregistrer sur le disque un petit dict
objet dont les clés sont du type str
et les valeurs sont int
s , puis le récupérer . Quelque chose comme ça:
{'juanjo': 2, 'pedro':99, 'other': 333}
Quelle est la meilleure option et pourquoi? Sérialisez-le avec pickle
ou avec simplejson
?
J'utilise Python 2.6.
simplejson
, vous utiliseriez lejson
module intégré (qui a exactement la même interface).Réponses:
Si vous n'avez pas d'exigences d'interopérabilité (par exemple, vous allez simplement utiliser les données avec Python) et qu'un format binaire convient, optez pour cPickle qui vous donne une sérialisation d'objets Python très rapide.
Si vous souhaitez une interopérabilité ou un format texte pour stocker vos données, optez pour JSON (ou un autre format approprié en fonction de vos contraintes).
la source
cPickle
(oupickle
) basé sur vos locaux sur JSON. Quand j'ai lu votre réponse pour la première fois, j'ai pensé que la raison en était peut-être la rapidité, mais comme ce n'est pas le cas ... :)Je préfère JSON à pickle pour ma sérialisation. Unpickling peut exécuter du code arbitraire, et l'utilisation
pickle
pour transférer des données entre des programmes ou stocker des données entre des sessions est une faille de sécurité. JSON n'introduit pas de faille de sécurité et est standardisé, de sorte que les données peuvent être consultées par des programmes dans différentes langues si vous en avez besoin.la source
Vous pourriez également trouver cela intéressant, avec quelques graphiques à comparer: http://kovshenin.com/archives/pickle-vs-json-which-is-faster/
la source
pickle
batjson
àint
,str
etfloat
.Si vous êtes principalement préoccupé par la vitesse et l'espace, utilisez cPickle car cPickle est plus rapide que JSON.
Si vous êtes plus préoccupé par l'interopérabilité, la sécurité et / ou la lisibilité humaine, utilisez JSON.
Les résultats des tests référencés dans d'autres réponses ont été enregistrés en 2010, et les tests mis à jour en 2016 avec le protocole cPickle 2 montrent:
Reproduisez-le vous-même avec cet essentiel , qui est basé sur le benchmark de Konstantin référencé dans d'autres réponses, mais en utilisant cPickle avec le protocole 2 au lieu de pickle, et en utilisant json au lieu de simplejson (puisque json est plus rapide que simplejson ), par exemple
Résultats avec python 2.7 sur un processeur Xeon 2015 décent:
Python 3.4 avec le protocole pickle 3 est encore plus rapide.
la source
JSON ou cornichon? Que diriez-vous de JSON et de cornichon! Vous pouvez utiliser
jsonpickle
. Il est facile à utiliser et le fichier sur le disque est lisible car il est JSON.http://jsonpickle.github.com/
la source
J'ai essayé plusieurs méthodes et j'ai découvert que l'utilisation de cPickle avec la définition de l'argument de protocole de la méthode de
cPickle.dumps(obj, protocol=cPickle.HIGHEST_PROTOCOL)
vidage comme: est la méthode de vidage la plus rapide.Production:
la source
Personnellement, je préfère généralement JSON car les données sont lisibles par l'homme . Certainement, si vous avez besoin de sérialiser quelque chose que JSON ne prendra pas, utilisez pickle.
Mais pour la plupart du stockage de données, vous n'aurez pas besoin de sérialiser quoi que ce soit de bizarre et JSON est beaucoup plus facile et vous permet toujours de l'ouvrir dans un éditeur de texte et de vérifier les données vous-même.
La vitesse est bonne, mais pour la plupart des jeux de données, la différence est négligeable; De toute façon, Python n'est généralement pas trop rapide.
la source
pickle
c'est deux fois plus rapide quejson
.100
éléments d'une liste, la différence est complètement négligeable à l'œil humain. Certainement différent lorsque vous travaillez avec des ensembles de données plus volumineux.