CodeGym /コース /Python SELF JA /シリアライズ

シリアライズ

Python SELF JA
レベル 22 , レッスン 0
使用可能

8.1 シリアライズとは何か

ファイルを扱い、データを保存して読み込む方法を学んだ後、次に本格的にファイルを扱う時が来ました。今日はシリアライズについて勉強を始めます。

シリアライズとは、オブジェクトをバイト列やファイルに保存したり、ネットワークを介して転送したり、データベースに保存できる形式に変換するプロセスです。デシリアライズはその逆のプロセスで、そのバイト列から元のオブジェクトを再構築します。

オブジェクトをファイルに保存する(またはネットワークで転送する)ためには、それを記録しやすい文字列(またはバイト列)に変換する必要があります。

シリアライズが使われる主な4つの方向性はこちらです:

  • オブジェクトの状態の保存: プログラムの実行間でオブジェクトの状態を保存するため。
  • データ転送: システム間または異なるシステム間でオブジェクトを転送するため。
  • キャッシング: オブジェクトをキャッシュに保存してすばやくアクセスできるようにするため。
  • データベース: 複雑なデータ構造をデータベースに保存するため。

シリアライズを扱うライブラリはたくさんあり、それぞれの要件に合わせて作られています。私たちはその中の5つを紹介しますが、そのうち2つについては詳しく学びます。

最も一般的なものを見てみましょう:

  • モジュール pickle
  • モジュール json
  • モジュール yaml
  • モジュール marshal
  • モジュール shelve

以下に各モジュールについての簡単な概要を示します:

8.2 モジュール pickle

pickleはPythonオブジェクトのシリアライズデシリアライズのための組み込みモジュールです。カスタムクラスを含むほとんどのPythonオブジェクトを保存して復元できます。

pickleの使用例:


import pickle

# シリアライズするオブジェクトの例
data = {'name': 'Alice', 'age': 30, 'is_student': False}

# オブジェクトをファイルにシリアライズ
with open('data.pkl', 'wb') as file:
    pickle.dump(data, file)

# ファイルからオブジェクトをデシリアライズ
with open('data.pkl', 'rb') as file:
    loaded_data = pickle.load(file)

print(loaded_data)

8.3 モジュール json

jsonはJSON (JavaScript Object Notation) を扱うための組み込みモジュールです。JSONはクライアントとサーバー間でデータを交換するために使用されるテキスト形式です。

jsonの使用例:


import json

# シリアライズするオブジェクトの例
data = {'name': 'Bob', 'age': 25, 'is_student': True}

# オブジェクトをJSON文字列にシリアライズ
json_string = json.dumps(data)
print(json_string)

# オブジェクトをJSONファイルにシリアライズ
with open('data.json', 'w') as file:
    json.dump(data, file)

# JSON文字列からオブジェクトをデシリアライズ
loaded_data = json.loads(json_string)
print(loaded_data)

# JSONファイルからオブジェクトをデシリアライズ
with open('data.json', 'r') as file:
    loaded_data = json.load(file)
print(loaded_data)

8.4 モジュール yaml

yaml (YAML Ain't Markup Language) は人間が読みやすいデータシリアライゼーションフォーマットです。Pythonでは外部ライブラリのPyYAMLを使用してYAMLを扱います。

yamlの使用例:


import yaml

# シリアライズするオブジェクトの例
data = {'name': 'Carol', 'age': 27, 'is_student': False}

# オブジェクトをYAML文字列にシリアライズ
yaml_string = yaml.dump(data)
print(yaml_string)

# オブジェクトをYAMLファイルにシリアライズ
with open('data.yaml', 'w') as file:
    yaml.dump(data, file)

# YAML文字列からオブジェクトをデシリアライズ
loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
print(loaded_data)

# YAMLファイルからオブジェクトをデシリアライズ
with open('data.yaml', 'r') as file:
    loaded_data = yaml.load(file, Loader=yaml.FullLoader)
print(loaded_data)

8.5 モジュール marshal

marshalはPythonコードのシリアライズに使用されるPythonオブジェクトのシリアライズ用組み込みモジュールです。pickleより高速ですが、対応するオブジェクトタイプが少なく、柔軟性がありません。

marshalの使用例:


import marshal

# シリアライズするオブジェクトの例
data = {'name': 'Dave', 'age': 35, 'is_student': True}

# オブジェクトをファイルにシリアライズ
with open('data.marshal', 'wb') as file:
    marshal.dump(data, file)

# ファイルからオブジェクトをデシリアライズ
with open('data.marshal', 'rb') as file:
    loaded_data = marshal.load(file)

print(loaded_data)

8.6 モジュール shelve

shelveは、キーに基づくストレージを使用してPythonオブジェクトをファイルに簡単に保存できる組み込みモジュールです。辞書に似ています。

shelveの使用例:


import shelve

# シリアライズするオブジェクトの例
data = {'name': 'Eve', 'age': 28, 'is_student': False}

# オブジェクトをファイルにシリアライズ
with shelve.open('data.shelve') as db:
    db['person'] = data

# ファイルからオブジェクトをデシリアライズ
with shelve.open('data.shelve') as db:
    loaded_data = db['person']

print(loaded_data)

モジュールやデータ保存形式は異なりますが、それらを扱うプログラマ目線では非常に似ています。以下では、モジュール pickleモジュール jsonをより詳しく扱います。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION