特定のモジュールのクラスのインスタンスである現在の名前空間内のすべてのオブジェクトをピクルする関数を書きたいと思います。アイデアは、ipython セッション中にユーザーが から多くのオブジェクトを作成しmymodule
、それらすべてをすばやく保存する必要がある場合があるということです。
だから、例えば、私はこのようなものが欲しい
from mymodule import cat, dog, pickle_all
c= cat(), d=dog()
pickle_all('killer_sesh.p')
セッションを終了し、1 か月間忘れて、戻ってきて新しいセッションを開始し、
from mymodule import upickle_all
objs = unpickle_all('killer_sesh.p')
そのため、最初の試み (以下を参照) は、現在の名前空間に貼り付けたときに機能します。関数として定義するか、mymodule のように別の場所に配置すると、dir()
コマンドは現在の名前空間を返しませんが、関数から見た名前空間を返します。dir() の結果を引数として渡しても、オブジェクトは関数内で使用できません。
import pickle
filename= 'killer_sesh.p'
module='mymodule'
module_objects = {}
for k in dir():
try:
if eval(k).__module__.split('.')[0] == module:
if k[0]!='_':
print(k)
module_objects[k] = eval(k)
except(AttributeError):
pass
file= open(filename,'w')
pickle.dump(module_objects, file)
file.close()
このような機能は可能ですか?