如何在当前python会话中保存所有变量?

use*_*r10 79 python save

我想在我当前的python环境中保存所有变量.似乎有一个选择是使用'pickle'模块.但是,我不想这样做有两个原因:

1)我必须为每个变量调用pickle.dump()
2)当我想要检索变量时,我必须记住保存变量的顺序,然后执行pickle.load()来检索每个变量.

我正在寻找一些可以保存整个会话的命令,这样当我加载这个保存的会话时,我的所有变量都会被恢复.这可能吗?

非常感谢!
拉夫

编辑:我想我不介意为我想保存的每个变量调用pickle.dump(),但记住保存变量的确切顺序似乎是一个很大的限制.我想避免这种情况.

unu*_*tbu 72

如果你使用shelve,你不必记住对象被腌制的顺序,因为shelve它给你一个类似字典的对象:

搁置你的工作:

import shelve

T='Hiya'
val=[1,2,3]

filename='/tmp/shelve.out'
my_shelf = shelve.open(filename,'n') # 'n' for new

for key in dir():
    try:
        my_shelf[key] = globals()[key]
    except TypeError:
        #
        # __builtins__, my_shelf, and imported modules can not be shelved.
        #
        print('ERROR shelving: {0}'.format(key))
my_shelf.close()
Run Code Online (Sandbox Code Playgroud)

恢复:

my_shelf = shelve.open(filename)
for key in my_shelf:
    globals()[key]=my_shelf[key]
my_shelf.close()

print(T)
# Hiya
print(val)
# [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

  • 完善.这就是我想要的.顺便说一句,我发现你的帖子中的这句话非常有趣:"搁置你的工作":) (4认同)
  • 在这里,我认为"泡菜"很有趣!:) http://en.wikipedia.org/wiki/Inherently_funny_word (3认同)
  • 我知道这个答案很旧,当我这样做时,我有以下错误:`PicklingError: Can't pickle <built-in function raw_input>: it's not the same object as __builtin__.raw_input` 我只有 2 个变量声明在我的工作区。关于如何解决这个问题的任何想法?在这个答案之后有更好的方法来保存当前会话吗? (2认同)
  • 看起来一些内置函数和包将无法被搁置,所以只需使用“ except:”而不是“ except TypeError:”。这将搁置用户定义的变量和大多数对象(熊猫数据框对我来说搁置得很好) (2认同)

use*_*273 55

坐在这里并且未能保存globals()为字典,我发现你可以使用dill库来挑选一个会话.

这可以通过使用:

import dill                            #pip install dill --user
filename = 'globalsave.pkl'
dill.dump_session(filename)

# and to load the session again:
dill.load_session(filename)
Run Code Online (Sandbox Code Playgroud)

  • 这只是一个范围问题,我猜你可以将你所有的locals()附加到globals(),如果你必须的话? (3认同)
  • 我认为这是最简单的方法,谢谢:) (2认同)

shm*_*008 5

一种很简单的方法可以满足您的需求。对我来说,它做得很好:

只需在“变量资源管理器”(Spider的右侧)上单击此图标:

将所有变量保存为* .spydata格式

加载所有变量或图片等