2021-08-06に投稿

Python 標準ライブラリ pickle 直列化

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()

参考

pickle --- Python オブジェクトの直列化

Originally published at marusankakusikaku.jp
ツイッターでシェア
みんなに共有、忘れないようにメモ

maru3kaku4kaku

Pythonこつこつ学習中。よく忘れる。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント