144

キーが s 型で値がs の小さなdictオブジェクトをディスクに保存し、それを復元する必要があります。このようなもの:strint

{'juanjo': 2, 'pedro':99, 'other': 333}

最適なオプションとその理由は何ですか? pickleまたはでシリアル化しsimplejsonますか?

Python 2.6 を使用しています。

4

7 に答える 7

116

シリアライゼーションには、ピクルスよりも JSON を好みます。Unpickling は任意のコードを実行する可能性がありpickle、プログラム間でデータを転送したり、セッション間でデータを保存したりするために使用すると、セキュリティ ホールになります。JSON はセキュリティ ホールを導入せず、標準化されているため、必要に応じてさまざまな言語のプログラムからデータにアクセスできます。

于 2010-02-13T22:33:07.943 に答える
82

相互運用性の要件がなく (たとえば、データを Python で使用するだけである場合)、バイナリ形式で問題ない場合は、 Python オブジェクトのシリアル化を非常に高速に行うcPickleを使用してください。

相互運用性が必要な場合、またはテキスト形式でデータを保存する場合は、JSON (または制約に応じて他の適切な形式) を使用してください。

于 2010-02-13T22:22:51.170 に答える
45

比較するいくつかのチャートを使用して、これも興味深いと思うかもしれません:http: //kovshenin.com/archives/pickle-vs-json-which-is-faster/

于 2011-06-02T14:30:41.577 に答える
26

cPickle は JSON よりも高速であるため、主に速度とスペースに関心がある場合は、cPickle を使用してください。

相互運用性、セキュリティ、および/または可読性に関心がある場合は、JSON を使用してください。


他の回答で参照されているテスト結果は 2010 年に記録され、2016 年に cPickleプロトコル 2で更新されたテストは次のように表示されます。

  • cPickle の 3.8 倍高速な読み込み
  • cPickle 1.5x 高速読み取り
  • cPickle 少し小さめのエンコーディング

これは、他の回答で参照されているコンスタンティンのベンチマークに基づいていますが、ピクルの代わりにプロトコル 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   -

pickle プロトコル 3 を使用する Python 3.4 はさらに高速です。

于 2016-09-21T03:42:36.700 に答える
13

JSONまたはピクルス?JSONとピクルはどうですか!

使用できますjsonpickle。使いやすく、JSON であるため、ディスク上のファイルを読み取ることができます。

jsonpickle のドキュメントを参照してください

于 2010-02-13T22:55:10.170 に答える