我的python代碼正在接收一個表示hdf5文件字節的字節數組。h5py可以從內存中的字節數組加載文件嗎?
我想讀這個字節數組到內存中的h5py文件對象,而不先寫字節數組到磁盤。 This page說我可以打開一個內存映射文件,但它會是一個新的空文件。我想從字節數組轉到內存中的hdf5文件,使用它,放棄它,不要在任何時候寫入磁盤。
是否可以用h5py做到這一點? (或用C HDF5如果這是唯一的方法)
我的python代碼正在接收一個表示hdf5文件字節的字節數組。h5py可以從內存中的字節數組加載文件嗎?
我想讀這個字節數組到內存中的h5py文件對象,而不先寫字節數組到磁盤。 This page說我可以打開一個內存映射文件,但它會是一個新的空文件。我想從字節數組轉到內存中的hdf5文件,使用它,放棄它,不要在任何時候寫入磁盤。
是否可以用h5py做到這一點? (或用C HDF5如果這是唯一的方法)
你可以嘗試使用Binary I/O創建一個文件對象,並通過h5py閱讀:
f = io.BytesIO(YOUR_H5PY_STREAM)
h = h5py.File(f,'r')
我也真的很希望能夠從內存中的數據像現有的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文件,並將一個字節流「轉儲」到其中。
您是否找到了解決方案? – konus
找不到解決方案。我試圖從tar.gz壓縮文件中加載hd5文件而沒有額外的磁盤I/O,但最終寫出了一個臨時文件。你可以使用unix FIFO文件和線程/分支來解決這個問題,但我沒有嘗試。 – lindyblackburn
我正在嘗試做同樣的事情。你可以在解決方案中顯示一些代碼嗎?謝謝! – konus
我找到了解決方案並將其發佈到此處:https://stackoverflow.com/questions/11588630/pass-hdf5-file-to-h5py-as-binary-blob-string/45900556#45900556 – SCGH