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ドキュメント