python辞書を次のように保存しました:
import cPickle as pickle
pickle.dump(dictname, open("filename.pkl", "wb"))
そして、この方法で別のスクリプトにロードします。
dictname = pickle.load(open("filename.pkl", "rb"))
この後、どのようにしてファイルを閉じることができますか?
代わりに with
ステートメント を使用することをお勧めします。これにより、例外が発生した場合でも、ステートメントの終了時にファイルが閉じられます。
with open("filename.pkl", "wb") as f:
pickle.dump(dictname, f)
...
with open("filename.pkl", "rb") as f:
dictname = pickle.load(f)
それ以外の場合、ファイルはガベージコレクターが実行されたときにのみ閉じられ、それが発生したときは不確定であり、予測することはほとんど不可能です。
with
ステートメントを使用するのがより良いアプローチですが、逆に、with
を使用しなかった場合は、ファイルハンドルを保持し、そこから閉じる必要があります。
_f = open('filename.pkl', 'wb')
pickle.dump(dictname, f)
f.close()
_
および他のスクリプト:
_f = open('filename.pkl','rb')
dictname = pickle.load(f)
f.close()
_
これは基本的にwith
があなたのために行っていることです。
ただし、(何らかの理由で)最初に投稿したコードで行き詰まり、元の質問に答える場合は…はい、ガベージコレクターは将来の不特定の時間にコードを閉じます。または、gc
モジュールを使用してファイルオブジェクトへの参照を追跡し、それを閉じることもできます。これを行うのに役立つ可能性のあるコードがいくつかあります。例: https://github.com/uqfoundation/dill/blob/master/dill/pointers.py
ただし、with
とf.close()
の方がはるかに好ましいため、実際にピクルスになっている場合を除いて、gc
モジュールをトレースすることは避けてください。