クラスのpickle化
実際問題を解くときに,対象とするデータをクラスにすると便利だ.たとえば,点クラスというのはこんな感じに作っておく.
class Node():
def __init__(self, idx, name, address, lat, lng, x=None, y=None):
self.name = name
self.address = address
self.idx = idx
self.lat = lat
self.lng = lng
self.x = x
self.y = y
def __str__(self):
return "[{0}] {1} {2} ({3}:{4}) to base {5}".format( self.idx,
self.name, self.address, self.lat,
self.lng, self.base_idx )
生成したインスタンスをリストや辞書に保管して使うが,これをpickleで保管しようとするとエラーする.
cloudpickleというのを使うと可能になる.インストールはpipでできる.
https://github.com/cloudpipe/cloudpickle
Cというリストにオブジェクトを保管してあるとすると,ファイルへの保管はこんな感じでできる.
import cloudpickle as cp
#pickled_C = cp.dumps(C)
with open('sample.pickle', mode='wb') as f:
cp.dump(C,f)
読み込みはこんなかんじだ.
#newC = cp.loads(pickled_C)
with open('sample.pickle', mode='rb') as f:
newC = cp.load(f)
もちろん,読み込み時にはクラスの定義をしておく必要がある.
実際問題をどのようにPythonで整理するかにはコツがある.具体例を示しながら本にしていければと思うが,結構長めになることが心配だ.
この記事が気に入ったらサポートをしてみませんか?