この記事ではPythonで文字列とオブジェクトのシリアライゼーション(直列化)に関する手法を詳しく解説します。Python標準ライブラリに含まれる`pickle`モジュールと`json`モジュールを使用した具体的なコード例、その詳細解説、さらには応用例までを取り上げます。
目次
はじめに:シリアライゼーションとは
シリアライゼーションとは、プログラムが扱う複雑なデータやオブジェクトを一定の形式に変換し、保存したり転送するための手法です。Pythonでは、主に`pickle`と`json`の二つのモジュールがシリアライゼーションに利用されます。
pickleモジュールとは
Pythonオブジェクトをそのままファイルに保存するためのモジュールです。ただし、セキュリティの観点から非信頼性のあるソースからのデータをデシリアライゼーションする際には注意が必要です。
jsonモジュールとは
JSON形式でデータを読み書きするためのモジュールです。WebAPIとの連携や設定ファイルなどでよく使用されます。
基本的な使用方法
pickleモジュールを用いたシリアライゼーション
import pickle
# シリアライズするデータ
data = {'name': 'Alice', 'age': 30, 'email': 'alice@example.com'}
# ファイルに保存
with open('data.pkl', 'wb') as f:
pickle.dump(data, f) # データをファイルに書き込む
上記のコードでは、辞書オブジェクト`data`を`data.pkl`という名前のファイルに保存しています。
デシリアライゼーションの例
# ファイルからデータを読み込む
with open('data.pkl', 'rb') as f:
loaded_data = pickle.load(f) # データをファイルから読み込む
print(loaded_data)
jsonモジュールを用いたシリアライゼーション
import json
# シリアライズするデータ
data = {'name': 'Alice', 'age': 30, 'email': 'alice@example.com'}
# JSON形式で保存
with open('data.json', 'w') as f:
json.dump(data, f)
応用例
クラスオブジェクトのシリアライゼーション
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# インスタンスを作成
person = Person('Bob', 40)
# シリアライゼーション
with open('person.pkl', 'wb') as f:
pickle.dump(person, f)
複数のオブジェクトのシリアライゼーション
# 複数のデータを保存
data1 = {'x': 1, 'y': 2}
data2 = [1, 2, 3, 4]
data3 = 'Hello, world!'
with open('multiple.pkl', 'wb') as f:
pickle.dump(data1, f)
pickle.dump(data2, f)
pickle.dump(data3, f)
jsonでの日本語文字列の取り扱い
# 日本語を含むデータ
data = {'name': '太郎', 'age': 20}
# JSON形式で保存
with open('japanese.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False)
まとめ
Pythonでの文字列とオブジェクトのシリアライゼーションは非常に簡単に行うことができますが、用途や安全性に応じて適切なモジュ
ールや手法を選ぶ必要があります。`pickle`はPython特有のオブジェクトも扱えますが、セキュリティ面でのリスクがあります。一方で、`json`はWebAPIなどで広く利用されており、人間にも機械にも読みやすい形式です。
コメント