メインコンテンツまでスキップ

ファイルからPythonオブジェクトを逆シリアル化する方法

以下は、Pythonオブジェクトをファイルからデシリアライズする方法についてのチュートリアルです。

ステップ1: シリアライズとデシリアライズの理解 シリアライズは、オブジェクトをファイルやネットワークストリームなどに保存または転送できる形式に変換するプロセスです。デシリアライズは、シリアライズされたデータをオブジェクトに戻す逆のプロセスです。

ステップ2: シリアライズライブラリの選択 Pythonには、Pickle、JSON、YAMLなど、いくつかのシリアライズライブラリが用意されています。このチュートリアルでは、Pythonの組み込みシリアライズモジュールであるPickleライブラリに焦点を当てます。

ステップ3: シリアライズするオブジェクトの作成 オブジェクトをデシリアライズする前に、シリアライズするためのいくつかのオブジェクトが必要です。例として、nameageaddressなどの属性を持つ単純なクラスPersonを作成しましょう。

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

ステップ4: オブジェクトをシリアライズしてファイルに保存 オブジェクトをシリアライズするには、Pickleライブラリのpickle.dump()関数を使用します。この関数は2つの引数を受け取ります。シリアライズするオブジェクトとシリアライズデータを書き込むためのファイルオブジェクトです。

import pickle

person1 = Person("John Doe", 25, "123 Main St")
person2 = Person("Jane Smith", 30, "456 Elm St")

# オブジェクトをシリアライズしてファイルに保存
with open("persons.pkl", "wb") as file:
pickle.dump(person1, file)
pickle.dump(person2, file)

上記のコードでは、2つのPersonオブジェクトを作成し、それらを"persons.pkl"というファイルに保存しています。

ステップ5: ファイルからオブジェクトをデシリアライズ オブジェクトをデシリアライズするには、Pickleライブラリのpickle.load()関数を使用します。この関数はファイルオブジェクトを引数に取り、デシリアライズされたオブジェクトを返します。

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

# デシリアライズされたオブジェクトにアクセスして表示
print(deserialized_person1.name)
print(deserialized_person2.age)

上記のコードでは、"persons.pkl"ファイルを読み取りモードで開き、pickle.load()を使用してオブジェクトをデシリアライズしています。その後、デシリアライズされたオブジェクトの属性にアクセスして表示することができます。

ステップ6: 例外の処理 オブジェクトをデシリアライズする際には、発生する可能性のある例外を適切に処理することが重要です。たとえば、ファイルが見つからない場合や、ファイルに互換性のないデータが含まれている場合などです。

try:
with open("persons.pkl", "rb") as file:
deserialized_person1 = pickle.load(file)
deserialized_person2 = pickle.load(file)
except FileNotFoundError:
print("ファイルが見つかりません!")
except EOFError:
print("ファイルの終端に到達しました!")

上記のコードでは、デシリアライズ中に発生する可能性のあるFileNotFoundErrorEOFErrorの例外をtry-exceptブロックで処理しています。

以上です!これで、Pickleライブラリを使用してPythonオブジェクトをファイルからデシリアライズする方法を学びました。適切に例外を処理し、シリアライズおよびデシリアライズされたオブジェクトの互換性を確保するようにしてください。