home changes contents help options

247:オブジェクトをファイルに保存する

pickle モジュールを使用します。

ファイルに保存する

dump メソッドを使用します。ファイルはバイナリモードでオープンするようにしてください。

>>> import pickle
>>> s = 'Hello World'
>>> fobj = open('pickle_data', 'wb', pickle.HIGHEST_PROTOCOL)
>>> pickle.dump(s, fobj)
>>> fobj.close()

pickel のプロトコルは複数のバージョン存在し、第 3 引数で指定することができます。最新バージョンは pickle.HIGHEST_PROTOCOL で確認できます(CPython 2.5.2 では 2 でした)。省略すると最も古い 0 が使用されます。

ファイルから読み出す

load メソッドを用います。

>>> fobj = open('pickle_data', 'rb')
>>> ss = pickle.load(fobj)
>>> ss
'Hello World'
>>> fobj.close()

ファイルではなく文字列に変換する

loads, dumps を用います。文字列になるので、これをデータベースに保持したりすることができるようになります。

>>> import pickle
>>> s = 'Hello World'
>>> p = pickle.dumps(s, pickle.HIGHEST_PROTOCOL)
>>> p
'\x80\x02U\x0bHello Worldq\x00.'
>>> pickle.loads(p)
'Hello World'

他の方法としては、 StringIO? を使用するというものがあります。 dump, load は実際のファイルオブジェクトでなくても受け付けるのです。

>>> from StringIO import StringIO
>>> s = 'Hello World'
>>> sio = StringIO()
>>> pickle.dump(s, sio, pickle.HIGHEST_PROTOCOL)
>>> sio.seek(0)
>>> pickle.load(sio)
'Hello World'

より詳しい情報はライブラリリファレンスの pickle を参照してください。