4

次のような辞書があるとします。

Test = {"apple":[3,{1:1,3:5,6:7}],"banana":[4,{1:1,3:5,6:7,11:2}]}

この辞書を一時ファイルに保存して、後で辞書を再構築できるようにします。(外部ソートXDを行っています)

親切な人は私を助けることができますか?csv 形式で保存する方法があることは知っていますが、これは特別な種類の辞書です。ありがとう。

4

3 に答える 3

6

データ構造をファイルに保存するには、シリアル化形式を決定する必要があります。シリアル化形式は、メモリ内のデータ構造を取り、それをファイルに書き込むことができる一連のバイトに変換します。この一連のバイトをデータ構造に戻すプロセスは、逆シリアル化と呼ばれます。

Python には、さまざまな特性を持つシリアライゼーションのオプションが多数用意されています。一般的な 2 つの選択肢とそのトレードオフを次に示します。

  • pickleは、ほぼすべての Python オブジェクトを表すことができるコンパクトな形式を使用します。ただし、これは Python 固有のものであるため、後でファイルを (簡単に) デコードできるのは Python プログラムだけです。フォーマットの詳細は Python のリリースによっても異なる可能性があるため、データ ファイルを作成した Python と同じバージョンまたは新しいバージョンの Python でデータ ファイルを再読み込みする場合にのみ、pickle を使用することをお勧めします。Pickle は再帰的なデータ構造を扱うことができます。最後に、pickle は、他の悪意のある可能性のあるプログラムによって提供されたデータを読み取るのには適していません。これは、pickle 化されたデータ構造をデコードすると、複雑なオブジェクトを再構築するためにアプリケーションで任意のコードが実行される可能性があるためです。

  • jsonNoneは、数字、文字列、ブール値、リスト、辞書などのデータ型の小さなセットのみを表すことができる、人間が判読できるテキストベースの形式を使用します。ただし、これは他の多くのプログラミング言語の同等のライブラリで読み取ることができる標準形式であり、Python のリリースごとに変わることはありません。JSON は再帰的なデータ構造をサポートしていませんが、結果のデータ構造が多くのメモリを使用する可能性があることを除いて、未知のソースから JSON オブジェクトをデコードすることは一般的に安全です。

これらのモジュールの両方で、dump関数はデータ構造をファイルに書き込むことができ、load関数は後でそれを回復できます。違いは、ファイルに書き込まれるデータの形式にあります。

于 2013-03-17T19:00:29.667 に答える
4

pickleモジュールは、Python データをシリアライズするのに非常に便利です。これはおそらく、Python データ構造をダンプして再ロードする最速の方法でもあります。

>>> import pickle
>>> Test = {"apple":[3,{1:1,3:5,6:7}],"banana":[4,{1:1,3:5,6:7,11:2}]}
>>> pickle.dump(Test, open('test_file', 'w'))
>>> pickle.load(open('test_file', 'r'))
{'apple': [3, {1: 1, 3: 5, 6: 7}], 'banana': [4, {1: 1, 3: 5, 11: 2, 6: 7}]}
于 2013-03-17T18:57:14.727 に答える
0

私にとって、明らかに最高のシリアライザーはmsgpackです。

http://jmoiron.net/blog/python-serialization/

他と同じ方法。

于 2013-03-17T22:38:48.033 に答える