2013-07-17 61 views
3

我有一個矩陣分解過程,我正在picloud上運行。輸出是一組numpy數組(ndarray)。如何將Numpy數組輸出到Picloud的文件對象

現在,我想將它保存到我的存儲桶中,但是我無法按照正確的方式將其保存。讓我們假設要保存的陣列是P.

我想:

cloud.bucket.putf(P,'p.csv') 

而是返回了一個錯誤:「IO錯誤:File對象是不可搜索無法傳輸。」

我試圖

numpy.ndarray.tofile(P,f, sep=",", format="%s") #outputing the array to a file object f 
cloud.bucket.putf(f,'p.csv') #saving the file object f in the bucket. 

我嘗試了幾個其他的事情,包括使用numpy.savetext使用(因爲我想如果我跑在本地),但我不能在picloud文檔之間來解決這個和stackexchange問​​題。儘管如此,我還沒有嘗試過酸菜。我覺得這是直截了當的,但花了幾個小時後,我感覺很蠢。

+0

你是如何打開'F'(讀寫,只寫...)?在嘗試'cloud.bucket.putf'之前,您還應該關閉並重新打開它,或者使用帶有文件名的'cloud.bucket.put'。 – voithos

+0

我實際上試圖將數組P轉換爲文件對象f,因爲'cloud.bucket.put'的文檔需要一個文件對象作爲輸入。 –

回答

2

正如你猜,你要醃數組如下:

import cloud 
import cPickle as pickle 

# to write 
cloud.bucket.putf(pickle.dumps(P), 'p.csv') 

# to read 
obj = pickle.loads(cloud.bucket.getf('p.csv').read()) 

這是序列化和存儲任何Python對象在PiCloud桶的一般方法。我還建議您將csv文件存儲在一個前綴下,以保持它的組織性[1]。

[1] http://docs.picloud.com/bucket.html#namespacing-with-prefix

+0

謝謝!我這樣做了,我想我已經解決了我的測試案例。現在運行更大的練習。多謝。是的,我會使用前綴,這是非常好的建議。 –