Python 標準ライブラリ pickle 直列化
Publish date: 2021-08-06
pickleとは漬物・ピクルスのこと。 標準にあるこのライブラリを使うと、Pythonのインスタンスをバイナリにして持ち運べるようになります。
ファイルでインスタンスを直列化する例
まず、モジュールのインポートと動作確認用のクラスを定義する。
import pickle
class SampleClass:
def __init__(self, name, age):
self.name = name
self.age = age
def show(self):
print(self.name, self.age)
ファイルへの直列化は「pickle.dump」で行う。 pickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None)
sc = SampleClass('Taro', 60)
with open('SampleClass.pickle', mode='wb') as f:
pickle.dump(sc, f)
ファイルからインスタンスを復元するには「pickle.load」で。 pickle.load(file, *, fix_imports=True, encoding=“ASCII”, errors=“strict”, buffers=None)
load_sc = None
with open('SampleClass.pickle', mode='rb') as f:
load_sc = pickle.load(f)
load_sc.show()
バイナリでインスタンスを直列化する例
「pickle.dumps」と「pickle.loads」を使う。
pickle.dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None)
p = pickle.dumps(sc)
print(p) # => b'\x80\x04\x95:\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x0bSampleClass\x94\x93\x94)\x81\x94}\x94(\x8c\x04name\x94\x8c\x04Taro\x94\x8c\x03age\x94K<ub.'
ファイルからインスタンスを復元するには「pickle.loads」で。 pickle.loads(data, /, *, fix_imports=True, encoding=“ASCII”, errors=“strict”, buffers=None)
loads_sc = pickle.loads(p)
loads_sc.show()