Pickleモジュールを使ってみる

pickleモジュールを使うと、Pythonのあらゆるオブジェクトをバイトストリームの形式に変換することができ、いつでも元に戻すことが出来る。この形式のデータはディスク上のファイルに書き込んだり、ネットワーク経由での伝送に利用できたりするので、例えばクライアントとサーバ間で多くのデータをやりとりする場合などに非常に力を発揮しそうだ。事実最近仕事で「これを知っていればもっと楽になったのに」という例があった。

簡単な例として、PickleTestというクラスのインスタンスp1、p2をpickleモジュールを使ってファイル保存し、そのファイルから同クラスのインスタンスp3、p4を作るプログラムpickletest.pyを作成してみる。

—–



pickletest.py

import pickle
class PickleTest:
def __init__(self, name, number):
self.name = name
self.number = number
def __repr__(self):
return "%(name)s %(number)s" % vars(self)
if __name__ == '__main__':
DIRECTORY = r'C:\Temp'
p1 = PickleTest('test1', 123)
p2 = PickleTest('test2', 987)
#write files
pickle.dump(p1, file(r'C:\Temp\p1', 'w'))
pickle.dump(p2, file(r'C:\Temp\p2', 'w'))
#read files
p3 = pickle.load(open(r'C:\Temp\p1'))
p4 = pickle.load(open(r'C:\Temp\p2'))
print p1
print p2
print p3
print p4

実行結果。

>>>
test1 123
test2 987
test1 123
test2 987

ちなみに出来上がったファイルをテキスト形式で開くと、以下のようになっていた。

C:\Temp\p1

(i__main__
PickleTest
p0
(dp1
S'name'
p2
S'test1'
p3
sS'number'
p4
I123
sb.