2013-05-20 2 views
5

Мой код python получает массив байтов, который представляет байты файла hdf5.Может ли h5py загрузить файл из массива байтов в память?

Я хотел бы прочитать этот массив байтов в объекте с файлом h5py в памяти без предварительной записи байтового массива на диск. This page говорит, что я могу открыть файл с отображением памяти, но это будет новый пустой файл. Я хочу перейти из массива байтов в файл hdf5 в памяти, использовать его, отказаться от него и не записывать на диск в любой момент.

Можно ли это сделать с h5py? (Или с hdf5 использованием C, если это единственный способ)

+1

Я пытаюсь сделать то же самое. Не могли бы вы показать код с решением, которое сработало? благодаря! – konus

+0

Я нашел решение и разместил его здесь: https://stackoverflow.com/questions/11588630/pass-hdf5-file-to-h5py-as-binary-blob-string/45900556#45900556 – SCGH

ответ

-3

Вы можете попробовать использовать Binary I/O для создания объекта File и читать его через h5py:

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

Спасибо, это похоже на то, что Мне нужно – mahonya

+0

Это решение не работает. См. Комментарий ниже. –

+0

Можете ли вы поделиться своим кодом, в котором работает это решение? –

1

Я хотел бы также очень хотелось, чтобы иметь возможность создайте объект h5py.File из данных в памяти, таких как существующий объект файла python, но я не вижу никаких указаний на то, что h5py.File принимает объект файла в качестве аргумента.

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

h5py.File (открытое ('test.h5'), 'г') дает подобную ошибку. Я также не вижу возможности открыть новый файл hdf5 с отображением памяти и «сбросить» байтовый поток в него.

+0

Вы нашли решение для этого? – konus

+1

Решение не найдено. Я пытался загрузить hd5-файлы из архива tar.gz без дополнительного ввода-вывода диска, но в итоге выписал временный файл. Возможно, вы сможете взломать это с помощью файла FIFO unix и потоков/fork, но я этого не делал. – lindyblackburn