2017-02-10 5 views
1

質問は少し基本的なように見えるかもしれませんが、私がインターネットで理解しているものは何も見つかりませんでした。私はディルで漬けたものをどのように保管しますか?ファイルにディクリング(ピクル)する方法は?

私は私の構築物(また、カスタムクラスが含まれてパンダのDATAFRAME、)保存するためにここまで来ている:私は読んだとき、私はエラーを取得する

import dill 
dill_file = open("data/2017-02-10_21:43_resultstatsDF", "wb") 
dill_file.write(dill.dumps(resultstatsDF)) 
dill_file.close() 

dill_file = open("data/2017-02-10_21:43_resultstatsDF", "rb") 
resultstatsDF_out = dill.load(dill_file.read()) 
dill_file.close() 

を読み取るためのが、

TypeError: file must have 'read' and 'readline' attributes 

どうすればよいですか?

答えて

5

だけreadせずにそれをファイルを与える:

resultstatsDF_out = dill.load(dill_file) 

をあなたもこのようなファイルするディルことができます。

with open("data/2017-02-10_21:43_resultstatsDF", "wb") as dill_file: 
    dill.dump(resultstatsDF, dill_file) 

ので:

dill.dump(obj, open_file) 

は、直接ファイルに書き込み。一方、

dill.dumps(obj) 

は、objをシリアル化し、自分でファイルに書き込むことができます。同様に

dill.load(open_file) 

は、ファイルからの読み込み、および:

dill.loads(serialized_obj) 

は、オブジェクトを使用すると、ファイルから読み取ることができシリアライズされたオブジェクトを形成し、構築します。

withステートメントを使用してファイルを開くことをお勧めします。ここで

with open(path) as fobj: 
    # do somdthing with fobj 

は同じ効果があります。

fobj = open(path) 
try: 
    # do somdthing with fobj 
finally: 
    fobj.close() 
あなたも、例外の場合には、 with文のインデントを残すよう、ファイルはすぐに閉じられます

関連する問題