【Python】pickleパッケージの理解と使い方

pickle は、 Pythonオブジェクトをシリアル化および逆シリアル化するためのPythonライブラリ内のモジュールです。Pickle は、ネットワーク経由で送信したり、ファイルに保存したりするために、オブジェクトを文字列またはバイト シーケンスにシリアル化できます。

pickle は、 Pythonオブジェクトをシリアル化可能な文字列またはバイト シーケンスに変換するための非常に便利なツールです。これらの文字列は、ファイルに保存したり、ネットワーク経由で送信したりできます。これは、いくつかの領域、特にキャッシュ、構成、永続化などの領域で非常に役立ちます。Pickle は、基本的なデータ型、辞書、リスト、タプル、セット、ユーザー定義のクラスとインスタンスなどを含む、ほとんどのPythonオブジェクトを処理できます。

pickleを使用すると、 Pythonオブジェクトをバイトのストリームに簡単にシリアル化できます。

import pickle

data = [1, 2, 3, 4, 5]
# 序列化对象
pickled_data = pickle.dumps(data)
print(pickled_data)

出力は次のとおりです。

b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03K\x04K\x05e.'

デシリアライズ:

unpickled_data = pickle.loads(pickled_data)
print(unpickled_data)

出力は次のとおりです。

[1, 2, 3, 4, 5]

注: pickleによってシリアル化されたオブジェクトはバイナリ データであるため、出力を出力するときにバイト文字列の接頭辞"b"を使用する必要があります。

Pickleには、他にも多くの関数があります。たとえば、dump()load()を使用してデータをファイルにシリアル化および逆シリアル化する、Protocolパラメーターを使用してシリアル化されたバージョンを制御する、HIGHEST_PROTOCOLを使用してシリアル化プロトコルの最高バージョンを指定するなどです。 。pickle は任意のPythonコードを逆シリアル化する可​​能性があるため、セキュリティ上の問題が発生する可能性があることに注意してくださいしたがって、信頼できるソースからのピクルドデータのみを逆シリアル化することをお勧めします

pickleは、Python標準ライブラリのシリアル化モジュールで、 Pythonオブジェクトをファイルに保存したり、ネットワーク経由で転送したりするために、Python オブジェクトをバイトのストリームに変換します。

Pickle は、プリミティブ データ型、複雑なデータ型、ユーザー定義クラスのインスタンスなど、ほとんどのPythonオブジェクトを処理できますPickle はシリアル化と逆シリアル化を実装できます。オブジェクトをバイト ストリームに変換することがシリアル化であり、バイト ストリームをオブジェクトに変換することが逆シリアル化です。pickleの主な用途には、キャッシュ、構成、永続化が含まれます。

たとえば、Python辞書があり、それをファイルに保存するかネットワークに転送したいとします。pickleパッケージを使用して次のことを実現できます。

import pickle

# 定义一个字典
person = {
    
    'name': 'Alice', 'age': 28, 'gender': 'Female'}

# 将字典对象序列化为字节流
bytes_person = pickle.dumps(person)

# 将字节流反序列化为对象
new_person = pickle.loads(bytes_person)

print(person)       # {'name': 'Alice', 'age': 28, 'gender': 'Female'}
print(new_person)   # {'name': 'Alice', 'age': 28, 'gender': 'Female'}

出力は次のとおりです。

{
    
    'name': 'Alice', 'age': 28, 'gender': 'Female'}
{
    
    'name': 'Alice', 'age': 28, 'gender': 'Female'}

より実践的な例を見てみましょう。機械学習モデルがあり、予測を行うためにそのモデルをファイルに保存し、必要に応じてモデルを再ロードしたいとします。pickleパッケージを使用してモデルをシリアル化および逆シリアル化できます

import pickle
import numpy as np
from sklearn.linear_model import LogisticRegression

# 生成一些随机数据
X = np.random.rand(100, 5)
y = np.random.randint(0, 2, (100,))

# 实例化一个逻辑回归模型
clf = LogisticRegression()

# 拟合模型
clf.fit(X, y)

# 将模型序列化为字节流
bytes_model = pickle.dumps(clf)

# 将字节流反序列化为模型对象
new_clf = pickle.loads(bytes_model)

# 对新数据进行预测
new_X = np.random.rand(10, 5)
new_y_pred = new_clf.predict(new_X)

print(new_y_pred)

出力は次のとおりです。

[1 1 0 1 0 1 1 0 1 1]

おすすめ

転載: blog.csdn.net/wzk4869/article/details/130648728