質問は少し基本的に思えるかもしれませんが、インターネットで理解できることは何も見つかりませんでした。ディルで漬けたものをどのように保存しますか?
私は自分の構成を保存するためにここまで来ました(カスタムクラスも含むパンダ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
どうすればよいですか?
今後の読者のための編集:この方法を(私のDataFrameをピクルスにするために)しばらく使用した後、今はそうすることを控えています。結局のところ、異なるプログラムバージョン(dillファイルに格納されている可能性のあるオブジェクトを含む)では、ピクルされたファイルを回復できない可能性があります。保存したいすべてのものが文字列として(可能な限り効率的に)表現できることを確認します-実際には人間が読める文字列です。現在、データをCSVとして保存しています。 CSVセル内のオブジェクトは、JSON形式で表される場合があります。そうすることで、私のファイルが今後数ヶ月および数年のうちに読めるようになります。コードが変更されても、文字列を解析してエンコーダーを書き換えることができ、CSVを手動で検査して理解できます。
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
ステートメントのインデントを終了するとすぐにファイルが閉じます。