okpy

Pythonエンジニア兼テックリーダーが、多くのプロジェクトとチーム運営から得た実践的な知識を共有するブログです。

シリアライズと復元:Python pickleの活用方法

Python pickle ライブラリ完全ガイド

Python 標準ライブラリの pickle は、オブジェクトをシリアライズ(直列化)して保存し、後で復元するためのツールを提供します。本記事では、pickle の主要な機能とその活用方法について詳しく解説します。

1. pickle ライブラリの概要

  • pickle は、Python のオブジェクトをバイトストリームに変換し、ファイルやネットワーク経由で保存・送信するための標準ライブラリです。
  • 一度 pickle したオブジェクトは、元の状態に復元(アンピクル)できます。
  • ほとんどの Python オブジェクト(リスト、辞書、クラスのインスタンスなど)をシリアライズできます。

インストール方法

picklePython の標準ライブラリなので、追加のインストールは不要です。

import pickle

2. 主な機能と使用例

(1) オブジェクトのシリアライズと保存(dump

import pickle

data = {"name": "Alice", "age": 25, "city": "Tokyo"}

with open("data.pkl", "wb") as f:
    pickle.dump(data, f)

使用例: 辞書やリストなどのオブジェクトをファイルに保存する。


(2) オブジェクトの復元(load

import pickle

with open("data.pkl", "rb") as f:
    loaded_data = pickle.load(f)
    print(loaded_data)

使用例: 保存したデータを元の状態に復元する。


(3) オブジェクトのシリアライズdumps)と復元(loads

import pickle

data = [1, 2, 3, 4, 5]
pickled_data = pickle.dumps(data)
restored_data = pickle.loads(pickled_data)
print(restored_data)

使用例: ファイルに保存せずに、一時的にデータをバイナリ形式に変換する。


(4) カスタムクラスのシリアライズ

import pickle

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person("Bob", 30)
with open("person.pkl", "wb") as f:
    pickle.dump(person, f)

with open("person.pkl", "rb") as f:
    loaded_person = pickle.load(f)
    print(loaded_person.name, loaded_person.age)

使用例: クラスのインスタンスシリアライズして保存・復元する。


(5) pickleプロトコルバージョンを指定

import pickle

data = {"language": "Python", "version": 3.9}
with open("data_protocol.pkl", "wb") as f:
    pickle.dump(data, f, protocol=pickle.HIGHEST_PROTOCOL)

使用例: より最適なプロトコルを指定して、シリアライズを高速化・最適化する。


(6) pickle を使ったリストの保存

import pickle

numbers = [1, 2, 3, 4, 5]
with open("numbers.pkl", "wb") as f:
    pickle.dump(numbers, f)

使用例: リストをシリアライズして、保存・復元できるようにする。


(7) pickle を使った辞書の保存

import pickle

config = {"debug": True, "theme": "dark"}
with open("config.pkl", "wb") as f:
    pickle.dump(config, f)

使用例: 設定情報を辞書として保存し、後でロードする。


(8) pickle で複数のオブジェクトを保存

import pickle

data1 = [10, 20, 30]
data2 = {"name": "Alice", "age": 25}

with open("multi.pkl", "wb") as f:
    pickle.dump(data1, f)
    pickle.dump(data2, f)

使用例: 1つのファイルに複数のオブジェクトを保存する。


(9) pickle で保存した複数オブジェクトの復元

import pickle

with open("multi.pkl", "rb") as f:
    data1 = pickle.load(f)
    data2 = pickle.load(f)
    print(data1, data2)

使用例: 1つのファイルから複数のオブジェクトをロードする。


(10) pickle を使ったオブジェクトの比較

import pickle

obj1 = {"data": [1, 2, 3]}
obj2 = pickle.loads(pickle.dumps(obj1))

print(obj1 == obj2)  # True
print(obj1 is obj2)  # False(異なるオブジェクトだがデータは同じ)

使用例: pickle を利用して、オブジェクトの状態を比較する。


3. pickle の主な機能

機能 説明
dump オブジェクトをファイルにシリアライズして保存
load シリアライズされたオブジェクトをファイルから復元
dumps オブジェクトをバイト列に変換
loads バイト列からオブジェクトを復元
protocol シリアライズ時のプロトコルを指定可能

まとめ

Pythonpickle ライブラリを活用すると、データやオブジェクトを簡単に保存・復元できます。特にデータ保存、機械学習モデルのキャッシュ、プロセス間通信などに便利です。pickle を使って効率的なデータ管理を実現しましょう! 🚀