保存工作区 - 将所有变量保存到文件。Python没有这个功能。

3 投票
5 回答
8699 浏览
提问于 2025-04-15 23:48

我有点搞不懂这个问题。其实功能很简单,也很明显: 你在任何编程语言里写了一段代码,然后运行它。在这段代码里,你生成了一些变量,然后用一个命令把这些变量(包括它们的值、名字,所有的东西)保存到一个文件里。保存好之后,你也可以用一个简单的命令在你的代码里打开这个文件。 在Matlab里,这个功能非常好用(用“保存工作区”和“加载工作区”就可以了),但是在Python里却有个奇怪的“pickle”协议,老是出错,而我只想做的就是保存变量,然后在另一个会话里再加载它(这到底是怎么回事?) 比如说,你不能保存带有变量的类(在Matlab里这没问题)。 你不能用cPickle加载数组(但你可以保存它们(这又是为什么?)) 为什么不把这个过程做得简单一点呢? 有没有办法可以把当前的变量和它们的值保存下来,然后再加载它们?

5 个回答

1

PiCloud 做了一种更高级的序列化方式,但我找不到相关的代码。我看到过一个海报展示

一般来说,在 Python 中,创建出来的对象没有一种统一的方法可以重新生成它们。有些情况下,重新生成对象特别困难,比如打开的文件,因为这需要经过好几个步骤才能完成。

2

你所描述的其实是Matlab环境的一个特点,而不是编程语言本身。你需要的是一种方法来保存某个对象的状态,这在几乎任何编程语言中都能很简单地做到。在Python中,使用“pickle”是最简单的方法。如果你能提供更多关于你遇到的错误的细节,大家可能会更好地帮助你解决问题。
一般来说,对于面向对象的编程语言(包括Python),把你的状态封装成一个单独的对象是个不错的做法,这样这个对象就可以被保存和加载。很多开发者发现,使用“pickle”来保存和恢复这样的对象非常有效,所以你遇到的问题可能是你实现中的某些特定情况。

2

既然你提到Matlab,那你可能想试试IPython。IPython是一个Python的命令行工具,它比你在执行Python时看到的标准命令行功能要强大得多。

其中一个功能就是可以加载和保存工作空间的会话,还可以把会话中的输入做成宏等,这些功能可能更像你在Matlab中使用的东西(我自己也用这两者,觉得IPython更优雅,但每个人的感觉可能不同):

http://ipython.scipy.org

撰写回答