2010-06-10 271 views
3

我无法理解它。非常简单,明显的功能: 你有任何编程语言的代码,你运行它。在这段代码中,您可以生成变量,而不是使用一个命令将它们(值,名称,即所有内容)保存到文件中。保存时您可以用简单的命令在代码中打开这样的文件。 它完美的matlab(保存工作区,加载工作区) - 在python中有一些奇怪的“pickle”协议,它会一直产生错误,而我想要做的就是保存变量,并在另一个会话中再次加载它? ????) fe你不能用变量保存类(在Matlab中没有问题) 你不能在cPickle中加载数组(但是你可以保存它们(?????)) 为什么不简化它? 有没有办法用值保存当前变量,然后加载它们?保存工作区 - 将所有变量保存到文件。 Python没有它)

+0

http://stackoverflow.com/questions/947810/how-to-save-a-python-interactive-session – Tyler 2010-06-10 16:03:03

+0

这里https://stackoverflow.com/a/35296032/4554888 是一个很好的方法来做它(与模块莳萝)。 – 4554888 2017-12-28 16:56:15

回答

2

你所描述的是Matlab环境特性而不是一种编程语言。 您需要的是一种存储某些对象的序列化状态的方法,这些对象几乎可以在任何编程语言中轻松完成。在蟒蛇世界中,pickle是实现它的最简单的方法,如果你能够提供关于它为你生成的错误的更多细节,那么人们可能会给你更多的细节。 一般来说,对于面向对象的语言(包括python)来说,将你的状态封装成可以序列化和反序列化的单个对象,然后存储/加载这样的类的实例总是一个好方法。对许多开发人员来说,腌制和取消这些对象是完美的,所以这必须是特定于您的实现的东西。

+0

感谢您的回复。 cPickle可以很好地处理简单的变量,但我有一个很大的数据库,比如说50mb。我在这里描述了什么问题http://stackoverflow.com/questions/3004792/cpickle-importerror-no-module-named-multiarray-我不幸得到了答案,所以我卡住了。我需要保存列表,当我这样做时,它不会加载,因为这个错误。所以我正在寻找另一种方式。 – Rafal 2010-06-10 16:11:57

+0

看来你的问题与Pickle无关,而是你的代码隐含地依赖于某个库。我会尝试在原始主题中用我的想法回复你,但它肯定与pickle无关,尽管酸洗(或一般序列化)大数据集(50mb是一个庞大的数据集用于序列化)不是一个好主意,你可能需要寻找替代品。可能您需要查看诸如MongoDB或CouchDB之类的文档存储以将数据存储为JSON格式吗? – 2010-06-10 16:17:06

1

PiCloud已经实施了一个发烧友泡菜,但是我找不到代码。我看到一个poster session

通常在Python中,实例化对象没有任何一种方法来重新创建它们,在某些情况下,它特别困难(如打开的文件),因为它需要几个步骤来重新创建。

+0

这些天获得picloud代码要容易得多 - 它在pypi中,所以'pip安装云'可以工作。查看http://stackoverflow.com/a/16891169/1264797,了解任意Python代码及其依赖关系的一个示例。 – stevegt 2013-06-08 16:39:22

2

由于您在谈论Matlab,因此您可能需要尝试一下IPython,它是一个Python的shell,它提供比执行Python时获得的标准解释器外壳更多的功能。

其中功能是加载/保存工作区会话,从会话输入等创建宏,这可能更像你在Matlab中使用的(我实际上使用它们并找到IPython更多优雅,但情况因人而异):

http://ipython.scipy.org

0

我采取与声明的在Matlab变量保存是一个环境功能问题。 matlab中的“保存”语句是matlab语言的一部分,不仅仅是一个命令。这是一个非常有用的函数,因为您不必担心文件I/O的繁琐细节,它可以处理来自标量,矩阵,对象,结构的各种变量。

相关问题