我有几个hdf文件,但我无法弄清楚如何在python中打开它们。当我尝试通过h5py阅读它时。File(filename, 'r') 命令,它导致了一个 OSError。
OSError: Unable to open file (file signature not found)
有两种类型的HDF文件。HDF集团目前维护的规范是HDF5。旧版本是HDF4,不再维护。这两种类型是完全不同的格式。
为了区分这两者,您可以查看文件的前 4 个字节:
hf = open(filename, 'rb')
bts = hf.read(4)
if bts == b'x89HDF':
print('HDF5')
elif bts == b'x0ex03x13x01':
print('HDF4')
HDF4 标头签名的含义如下:
b''.join([(x+64).to_bytes(1, 'big') for x in list(b'x0ex03x13x01')])
返回保留给 HDF 格式的发明者国家超级计算应用中心b'NCSA'
。
b'x89HDF'
是 8 字节 HDF5 签名b'x89HDFx0dx0ax1ax0a'
的前 4 个字节。字母HDF标识文件格式,其他不可打印的字符用于确保HDF5文件可以轻松识别。
要读取 HDF5 文件,您可以使用 HDF 组支持的 h5py 模块。对于HDF4文件,有许多Python绑定到HDF低级接口。
NASA PyHDF已经有一段时间没有更新了。它不仅支持通用的HDF4文件,还支持NASA自己的HDF-EOS扩展。
Unidata NetCDF4 库保持 NetCDF3兼容性,NetCDF3 与 HDF4 兼容。
from netCDF4 import Dataset
ds = Dataset(filename, 'r')