2013-05-20 13 views
5

Il mio codice Python riceve un array di byte che rappresenta i byte del file hdf5.h5py può caricare un file da un array di byte in memoria?

Mi piacerebbe leggere questo array di byte su un oggetto file in memoria h5py senza prima scrivere l'array di byte sul disco. This page dice che posso aprire un file mappato in memoria, ma sarebbe un nuovo file vuoto. Voglio passare dall'array di byte al file hdf5 in-memory, usarlo, scartarlo e non scrivere su disco in nessun punto.

È possibile farlo con h5py? (O con HDF5 utilizzando C se questo è l'unico modo)

+1

Sto provando a fare la stessa cosa. Potresti mostrare un codice con la soluzione che ha funzionato? Grazie! – konus

+0

Ho trovato la soluzione e l'ho postata qui: https://stackoverflow.com/questions/11588630/pass-hdf5-file-to-h5py-as-binary-blob-string/45900556#45900556 – SCGH

risposta

-3

Si potrebbe provare a utilizzare Binary I/O per creare un oggetto File e leggerlo tramite h5py:

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

Grazie, sembra che Ho bisogno di – mahonya

+0

Questa soluzione non funziona. Vedi il commento qui sotto. –

+0

Puoi condividere il tuo codice in cui questa soluzione funziona? –

1

Vorrei anche piace molto essere in grado di crea un oggetto h5py.File dai dati in memoria come un oggetto file python esistente, ma non vedo alcuna indicazione che h5py.File accetti un oggetto file come argomento.

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

h5py.File (aperta ('test.h5'), 'r') dà un errore simile. Inoltre non vedo alcun modo per aprire un nuovo file hdf5 mappato in memoria e "riversare" un flusso di byte in esso.

+0

Hai trovato qualche soluzione per questo? – konus

+1

Nessuna soluzione trovata. Stavo cercando di caricare file hd5 da un archivio tar.gz senza I/O su disco extra, ma ho finito per scrivere un file temporaneo. Potresti essere in grado di hackerarlo usando un file FIFO unix e thread/fork, ma non l'ho provato. – lindyblackburn