読者です 読者をやめる 読者になる 読者になる

Pythonライブラリリファレンスによると、pickleモジュールを使うとPythonのオブジェクト階層をバイトストリームに変換(pickle化)したり、バイトストリームをオブジェクト階層に変換(unpickle化)したりできるらしい。

バイトストリームにしてしまえば、それをファイルに保存したり、逆にファイルからそのバイトストリームデータを読み込んでオブジェクトに変換することも可能ってことね。
テスト用のデータ構造とかを生成できると楽かなぁと思って使ってみようと思ったけれど...ちょっと違うかなぁ。

pickle化できるオブジェクトは以下のようなものみたい。

  • None、 True、および False
  • 整数、長整数、浮動小数点数複素数
  • 通常文字列および Unicode 文字列
  • pickle 化可能なオブジェクトからなるタプル、リスト、集合および辞書
  • モジュールのトップレベルで定義されている関数
  • モジュールのトップレベルで定義されている組込み関数
  • モジュールのトップレベルで定義されているクラス
  • __dict__ または __setstate__() を pickle 化できる上記クラスのインスタンス

試しにdump()メソッドを使ってpickle化してみる。


$ python
>>> import pickle
>>> import sys
>>> print pickle.dump({'data':['foo','bar','baz']},sys.stdout)
(dp0
S'data'
p1
(lp2
S'foo'
p3
aS'bar'
p4
aS'baz'
p5
as.None
>>>
こんな感じで変換されるのか...YAMLみたいにデータ構造を手動生成できたらなぁと思ったけれど、こりゃちょっと厳しい。