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.