Python中无法从HDF4/HDF5文件提取实际数据的技术求助
解决HDF4/HDF5文件无法提取实际数据的问题
你目前用h5py和pyhdf能成功加载文件,但仅能获取数据集的元信息,无法提取实际数值,这是因为没有调用对应库的数据读取方法,以下是针对两种文件的修正方案:
一、HDF5文件(h5py库)
h5py.File.keys()返回的是数据集名称的视图,并非可直接读取的数据集对象。需要通过名称获取数据集,再用切片操作[:]或[...]提取数据:
import h5py as hp import numpy as np # 打开HDF5文件 f1 = hp.File('TPR7_uw1_00539.19980101.011127_SAS.hdf', 'r') # 获取所有数据集名称 ds_names = list(f1.keys()) print("HDF5数据集名称:", ds_names) # 读取指定数据集的实际数据 target_ds = f1[ds_names[0]] # 替换为你需要的数据集名称 data_h5 = target_ds[:] # 或 target_ds[...] print("HDF5数据形状:", data_h5.shape) print("HDF5数据示例:", data_h5[:5]) # 打印前5条数据 # 关闭文件 f1.close()
二、HDF4文件(pyhdf库)
SD.datasets()返回的是包含数据集元信息的字典,每个值是元组(包含名称、类型、维度等)。需要用SD.select()方法获取数据集对象,再通过get()或切片操作提取数据:
from pyhdf.SD import SD, SDC import numpy as np # 打开HDF4文件 f2 = SD('era5_2020_4_17_18.00_23.88_91.24.HDF', SDC.READ) # 获取所有数据集元信息 ds_info = f2.datasets() print("HDF4数据集信息:", ds_info) # 读取温度数据集的实际数据 T_ds = f2.select("T") # 通过数据集名称获取数据集对象 data_h4 = T_ds.get() # 或 T_ds[:] print("温度数据形状:", data_h4.shape) print("温度数据示例:", data_h4[:5]) # 打印前5条数据 # 关闭文件 f2.end()
关键说明
- 两种库的核心区别:
h5py通过文件对象直接索引数据集名称获取对象,pyhdf需要调用select()方法获取数据集对象。 - 切片操作
[:]会一次性读取全部数据,若数据集过大,可指定范围(如[0:100, :])分批读取,避免内存溢出。
内容的提问来源于stack exchange,提问作者Sky
相关产品推荐
相关产品推荐

