記事ディレクトリ
この
pickle
モジュール は、Pythonオブジェクト構造をシリアル化および逆シリアル化するためのバイナリプロトコルを実装します。
-
シリアル化:オブジェクトをバイトのシーケンスに変換するプロセスは、オブジェクトのシリアル化と呼ばれます。オブジェクト情報は永続的に保存できます
-
デシリアライズ:バイトのシーケンスをオブジェクトに復元するプロセスは、オブジェクトのデシリアライズと呼ばれます。最後にプログラムに保存されたオブジェクトを作成します
シリアル化:
pickle.dump(obj, file,protocol)
注:オブジェクトobjをファイルファイルに保存します。
- ファイルにはwrite()インターフェイスが必要です。ファイルは、「w」で開くファイル、StringIOオブジェクト、またはwrite()インターフェイスを実装するその他のオブジェクトにすることができます。
- プロトコルは、シリアル化に使用されるプロトコルバージョンです。
- 0:ASCIIプロトコル。シリアル化されたオブジェクトは、印刷可能なASCIIコードで表されます。
- 1:昔ながらのバイナリプロトコル。
- 2:バージョン2.3で導入された新しいバイナリプロトコルは、以前のプロトコルよりも効率的です。
- プロトコルのデフォルト値は0です。
import pickle
#使用pickle模块将数据对象保存到文件
data1 = {
'a': [1, 2.0, 3, 4+6j],
'b': ('string', u'Unicode string'),
'c': None}
selfref_list = [1, 2, 3]
selfref_list.append(selfref_list[:])
output = open('data.txt', 'wb')
# pickle字典使用协议0。
pickle.dump(data1, output)
# 使用可用的最高协议Pickle列表。
pickle.dump(selfref_list, output, -1)
output.close()
デシリアライズ:
pickle.load(file)
#使用pickle模块从文件中重构python对象
pkl_file = open('data.txt', 'rb')
data1 = pickle.load(pkl_file)
print(data1)
data2 = pickle.load(pkl_file)
print(data2)
pkl_file.close()
{'a': [1, 2.0, 3, (4+6j)], 'b': ('string', 'Unicode string'), 'c': None}
[1, 2, 3, [1, 2, 3]]
シリアル化はいつ必要ですか?
- インメモリオブジェクトの状態をファイルまたはデータベースに保存する場合。
- ソケットを使用してネットワーク経由でオブジェクトを転送する場合。
- RMIを介してオブジェクトを転送する場合。
- (最も一般的に使用されるものはデータベースに保存される場合があります)