キーが s 型で値がs の小さなdict
オブジェクトをディスクに保存し、それを復元する必要があります。このようなもの:str
int
{'juanjo': 2, 'pedro':99, 'other': 333}
最適なオプションとその理由は何ですか? pickle
またはでシリアル化しsimplejson
ますか?
Python 2.6 を使用しています。
シリアライゼーションには、ピクルスよりも JSON を好みます。Unpickling は任意のコードを実行する可能性がありpickle
、プログラム間でデータを転送したり、セッション間でデータを保存したりするために使用すると、セキュリティ ホールになります。JSON はセキュリティ ホールを導入せず、標準化されているため、必要に応じてさまざまな言語のプログラムからデータにアクセスできます。
相互運用性の要件がなく (たとえば、データを Python で使用するだけである場合)、バイナリ形式で問題ない場合は、 Python オブジェクトのシリアル化を非常に高速に行うcPickleを使用してください。
相互運用性が必要な場合、またはテキスト形式でデータを保存する場合は、JSON (または制約に応じて他の適切な形式) を使用してください。
比較するいくつかのチャートを使用して、これも興味深いと思うかもしれません:http: //kovshenin.com/archives/pickle-vs-json-which-is-faster/
cPickle は JSON よりも高速であるため、主に速度とスペースに関心がある場合は、cPickle を使用してください。
相互運用性、セキュリティ、および/または可読性に関心がある場合は、JSON を使用してください。
他の回答で参照されているテスト結果は 2010 年に記録され、2016 年に cPickleプロトコル 2で更新されたテストは次のように表示されます。
これは、他の回答で参照されているコンスタンティンのベンチマークに基づいていますが、ピクルの代わりにプロトコル 2 でcPickleを使用し、 simplejson の代わりに json を使用します ( jsonは simplejson よりも高速であるため)。
wget https://gist.github.com/jdimatteo/af317ef24ccf1b3fa91f4399902bb534/raw/03e8dbab11b5605bc572bc117c8ac34cfa959a70/pickle_vs_json.py
python pickle_vs_json.py
適切な 2015 Xeon プロセッサでの python 2.7 の結果:
Dir Entries Method Time Length
dump 10 JSON 0.017 1484510
load 10 JSON 0.375 -
dump 10 Pickle 0.011 1428790
load 10 Pickle 0.098 -
dump 20 JSON 0.036 2969020
load 20 JSON 1.498 -
dump 20 Pickle 0.022 2857580
load 20 Pickle 0.394 -
dump 50 JSON 0.079 7422550
load 50 JSON 9.485 -
dump 50 Pickle 0.055 7143950
load 50 Pickle 2.518 -
dump 100 JSON 0.165 14845100
load 100 JSON 37.730 -
dump 100 Pickle 0.107 14287900
load 100 Pickle 9.907 -
JSONまたはピクルス?JSONとピクルはどうですか!
使用できますjsonpickle
。使いやすく、JSON であるため、ディスク上のファイルを読み取ることができます。
jsonpickle のドキュメントを参照してください