hdf5 文件与 hdf 文件不同吗?

Is an hdf5 file different from an hdf file?

我有几个 hdf 文件,但我不知道如何在 python 中打开它们。当我尝试通过 h5py.File(filename, 'r') 命令读取它时,它导致了 OSError.

OSError: Unable to open file (file signature not found)

有两种类型的 HDF 文件。目前由 HDF Group 维护的规范是 HDF5。旧版本是 HDF4,不再维护。两种类型是完全不同的格式。

要区分两者,您可以查看文件的前 4 个字节:

hf = open(filename, 'rb')
bts = hf.read(4)
if bts == b'\x89HDF':
   print('HDF5')
elif bts == b'\x0e\x03\x13\x01':
   print('HDF4')

HDF4头签名的含义是这样的:

b''.join([(x+64).to_bytes(1, 'big') for x in list(b'\x0e\x03\x13\x01')])

returns b'NCSA' 留给国家超级计算应用中心,HDF 格式的发明者。

b'\x89HDF'是8字节HDF5签名的前4个字节b'\x89HDF\x0d\x0a\x1a\x0a'。字母 HDF 标识文件格式,其他 non-printable 个字符用于确保可以轻松识别 HDF5 文件。

要读取 HDF5 文件,您可以使用 HDF Group 支持的 h5py 模块。对于 HDF4 文件,有许多 Python 绑定到 HDF 低级接口。

NASA PyHDF好久没更新了。它不仅支持通用 HDF4 文件,还支持 NASA 自己的 HDF-EOS 扩展。

Unidata NetCDF4 库保持 NetCDF3 兼容性,NetCDF3 与 HDF4 兼容。

from netCDF4 import Dataset
ds = Dataset(filename, 'r')