16

我的 python 代码正在接收一个字节数组,它代表 hdf5 文件的字节。

我想将此字节数组读取到内存中的 h5py 文件对象,而无需先将字节数组写入磁盘。这个页面说我可以打开一个内存映射文件,但这将是一个新的空文件。我想从字节数组到内存中的 hdf5 文件,使用它,丢弃它,而不是在任何时候写入磁盘。

可以用 h5py 做到这一点吗?(或者如果这是唯一的方法,则使用 C 使用 hdf5)

4

3 回答 3

7

您可以尝试使用Binary I/O创建一个 File 对象并通过 h5py 读取它:

f = io.BytesIO(YOUR_H5PY_STREAM)
h = h5py.File(f,'r')
于 2013-05-23T12:25:03.663 回答
2

您可以使用io.BytesIOtempfile创建 h5 对象,这在官方文档http://docs.h5py.org/en/stable/high/file.html#python-file-like-objects中显示。

File 的第一个参数可能是 Python 文件类对象,例如 io.BytesIO 或 tempfile.TemporaryFile 实例。这是一种创建临时 HDF5 文件的便捷方式,例如用于测试或通过网络发送。

临时文件.临时文件

>>> tf = tempfile.TemporaryFile()
>>> f = h5py.File(tf)

或 io.BytesIO

"""Create an HDF5 file in memory and retrieve the raw bytes

This could be used, for instance, in a server producing small HDF5
files on demand.
"""
import io
import h5py

bio = io.BytesIO()
with h5py.File(bio) as f:
    f['dataset'] = range(10)

data = bio.getvalue() # data is a regular Python bytes object.
print("Total size:", len(data))
print("First bytes:", data[:10])
于 2019-01-04T01:51:52.353 回答
0

以下示例使用仍然可以读取和操作 H5 格式的来代替 H5PY。

import urllib.request
import tables
url = 'https://s3.amazonaws.com/<your bucket>/data.hdf5'
response = urllib.request.urlopen(url) 
h5file = tables.open_file("data-sample.h5", driver="H5FD_CORE",
                          driver_core_image=response.read(),
                          driver_core_backing_store=0)
于 2018-04-19T12:46:10.683 回答