2010-06-10 78 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的繁瑣細節,它可以處理來自標量,矩陣,對象,結構的各種變量。

相關問題