クラスの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で整理するかにはコツがある.具体例を示しながら本にしていければと思うが,結構長めになることが心配だ.

この記事が気に入ったらサポートをしてみませんか?