2013-05-20 35 views
5

我的python代碼正在接收一個表示hdf5文件字節的字節數組。h5py可以從內存中的字節數組加載文件嗎?

我想讀這個字節數組到內存中的h5py文件對象,而不先寫字節數組到磁盤。 This page說我可以打開一個內存映射文件,但它會是一個新的空文件。我想從字節數組轉到內存中的hdf5文件,使用它,放棄它,不要在任何時候寫入磁盤。

是否可以用h5py做到這一點? (或用C HDF5如果這是唯一的方法)

+1

我正在嘗試做同樣的事情。你可以在解決方案中顯示一些代碼嗎?謝謝! – konus

+0

我找到了解決方案並將其發佈到此處:https://stackoverflow.com/questions/11588630/pass-hdf5-file-to-h5py-as-binary-blob-string/45900556#45900556 – SCGH

回答

-3

你可以嘗試使用Binary I/O創建一個文件對象,並通過h5py閱讀:

f = io.BytesIO(YOUR_H5PY_STREAM) 
h = h5py.File(f,'r') 
+0

謝謝,這看起來像什麼我需要 – mahonya

+0

此解決方案不起作用。見下面的評論。 –

+0

你可以分享你的代碼,在這個解決方案的工作? –

1

我也真的很希望能夠從內存中的數據像現有的Python文件對象一樣創建一個h5py.File對象,但是我沒有看到任何跡象表明h5py.File接受一個文件對象作爲它的參數。

>>> f = io.BytesIO(open('test.h5').read()) 
>>> h5py.File(f, 'r') 
AttributeError: '_io.BytesIO' object has no attribute 'encode' 

h5py.File(open('test.h5'),'r')給出了類似的錯誤。我也沒有辦法打開一個新的內存映射的hdf5文件,並將一個字節流「轉儲」到其中。

+0

您是否找到了解決方案? – konus

+1

找不到解決方案。我試圖從tar.gz壓縮文件中加載hd5文件而沒有額外的磁盤I/O,但最終寫出了一個臨時文件。你可以使用unix FIFO文件和線程/分支來解決這個問題,但我沒有嘗試。 – lindyblackburn

相關問題