Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

pickleライブラリ

python用のデータをファイルに保存する。
Python オブジェクトの直列化および直列化されたオブジェクトの復元。
バイナリ形式でpython固有のフォーマット。
 
長所:
・ほとんどの組み込み方やクラスも保存できる。
(lambda関数などはpickle化できない)
・型を気にしない。
短所:
python以外との互換性がない。
・型が自由なので整合性がとりにくい場合がある。
 
類似のモジュール:
marshal:非推奨
JSON(JavaScript Object Notation):テキスト形式。python以外でも広く使える。
 
○pickle化のプロトコルバージョン
プロトコルバージョン 0 「人間に判読可能な」プロトコル
プロトコルバージョン 1  旧形式のバイナリフォーマット
プロトコルバージョン 2  Python 2.3以降
プロトコルバージョン 3  Python 3.0以降。デフォルトのプロトコルで、推奨
プロトコルバージョン 4  Python 3.4 で追加されました。
 
○書き込み(pickle化)
・pickle.dump(obj, file, protocol=None, *, fix_imports=True)
 すでにオープンしている ファイルオブジェクト file に書き込む
 Pickler(file, protocol).dump(obj) と等価
・ pickle.dumps(obj, protocol=None, *, fix_imports=True)
 ファイルに書く代わりに、bytes オブジェクトとしてオブジェクトの pickle 表現を返す。

○読み込み
・pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict") 
 Unpickler(file).load() と等価
 pickle のプロトコルバージョンは自動的に検出。
 fileオブジェクトにはread(), realdline()メソッドがある。
・pickle.loads(bytes_object, *, fix_imports=True, encoding="ASCII", errors="strict")
 bytes オブジェクトから pickle 化されたオブジェクト階層を読み込み、再構成して返す。 
 

import pickle

data = ["東京", 2020]
data2 = 5

with open('data.pkl', 'wb') as f:  # wb:バイナリ形式で書き込み
    pickle.dump(data, f)
with open('data.pkl', 'ab') as f:  # ab:バイナリ形式で追加書き込み
    pickle.dump(data2, f)

with open("data.pkl", "rb") as f:  # rb:バイナリ形式読み込み
    a = pickle.load(f)
    b = pickle.load(f)

print(a, b)                        #['東京', 2020] 5

 
参考;
pythonドキュメント