1. ホーム
  2. python

[解決済み] Pythonのシリアライゼーション - なぜpickleなのか?

2023-01-11 14:13:04

質問

Pythonのpicklingは、Pythonオブジェクトをオブジェクトプログラミングを尊重した形で「保存」する方法であり、txtファイルやDBに書き出すのとは異なると理解しています。

以下の点について、より詳細な情報や参考文献があれば教えてください。

  • ピクルスはどこに保存されるのですか?
  • なぜpickleはDBに格納するよりもオブジェクトの表現を保持するのですか?
  • あるPythonシェルセッションから別のセッションにpickleされたオブジェクトを取り出すことができますか?
  • シリアライゼーションが有用である重要な例はありますか?
  • pickleでシリアライズすることは、データの「圧縮」を意味するのでしょうか?

言い換えれば、私はpickleに関するドキュメントを探しています。Python.docはpickleの実装方法を説明していますが、シリアライズの使用と必要性についての詳細には踏み込んでいないようです。

どのように解決するのですか?

Picklingは、pythonのオブジェクト(リスト、dictなど)を文字ストリームに変換する方法です。この文字ストリームは、別のPythonスクリプトでオブジェクトを再構築するために必要なすべての情報を含んでいるということです。

ピクルス化された情報がどこに保存されるかについては、通常、1つで十分です。

with open('filename', 'wb') as f:
    var = {1 : 'a' , 2 : 'b'}
    pickle.dump(var, f)

これは var のディクショナリーを 'filename' ファイルに保存します。そして、別のスクリプトで、このファイルから変数にロードすると、辞書が再作成されます。

with open('filename','rb') as f:
    var = pickle.load(f)

picklingのもう一つの用途は、この辞書をネットワーク経由で送信する必要がある場合です(おそらくソケットか何かで)。まず文字ストリームに変換する必要があり、それからソケット接続で送信することができます。

また、ここで言う圧縮はありません...これは、ある表現 (RAM) から別の表現 (テキスト) に変換する方法だけです。

About.comにpicklingの紹介があります。 ここで .