【发布时间】:2021-04-23 21:10:37
【问题描述】:
我正在尝试使用以下代码在 Python 中打开一个 HDF5 文件:
with h5py.File('example.hdf5', 'r') as f:
ls = list(f.keys())
dat = f.get('data')
dt = np.array(dat)
但是,执行最后一行时出现此错误:
AttributeError: 'int' object has no attribute 'encode'
dat 有以下类:
h5py._hl.group.Group'
有人知道错误可能出在哪里吗?
在文件内部迭代的输出如下。如何访问文件的每个部分:
checking hdf5 file
/data is a Group
/data/model_cints is a Dataset
/hdf5_track_times is a Dataset
/meta is a Group
/meta/package is a Group
/meta/package/h5py is an object Dataset
/meta/package/numpy is an object Dataset
/meta/package/pypfilt is an object Dataset
/meta/package/python is an object Dataset
/meta/package/scipy is an object Dataset
/meta/package/toml is an object Dataset
/meta/param is a Group
/meta/param/component is a Group
/meta/param/component/model is an object Dataset
/meta/param/component/obs is a Group
/meta/param/component/obs/LatLon is an object Dataset
/meta/param/component/summary_table is a Group
/meta/param/component/summary_table/model_cints is an object Dataset
/meta/param/component/time is an object Dataset
/meta/param/data_dir is an object Dataset
/meta/param/hist is a Group
/meta/param/hist/extra_cols is a Dataset
/meta/param/hist/px_count is a Dataset
/meta/param/hist/wind_shift is a Dataset
/meta/param/hist/wind_size is a Dataset
/meta/param/last_n_periods is a Dataset
/meta/param/minimal_estimation_run is a Dataset
/meta/param/model is a Group
/meta/param/model/param_max is a Dataset
/meta/param/model/param_min is a Dataset
/meta/param/obs is a Group
/meta/param/obs/LatLon is a Group
/meta/param/obs/LatLon/sdev is a Dataset
/meta/param/out_dir is an object Dataset
/meta/param/prng_seed is a Dataset
/meta/param/random is an object Dataset
/meta/param/resample is a Group
/meta/param/resample/method is an object Dataset
/meta/param/resample/reg_toln is a Dataset
/meta/param/resample/regularisation is a Dataset
/meta/param/resample/regularise_or_fail is a Dataset
/meta/param/resample/threshold is a Dataset
/meta/param/scenario is a Group
/meta/param/scenario/id is an object Dataset
/meta/param/scenario/name is an object Dataset
/meta/param/steps_per_unit is a Dataset
/meta/param/summary is a Group
/meta/param/summary/from_first_day is a Dataset
/meta/param/summary/meta is a Group
/meta/param/summary/meta/packages is an object Dataset
/meta/param/summary/only_forecasts is a Dataset
/meta/param/time is a Group
/meta/param/time/start is a Dataset
/meta/param/time/until is a Dataset
/meta/param/tmp_dir is an object Dataset
/meta/prior is a Group
/meta/prior/lat is an object Dataset
/meta/prior/lon is an object Dataset
/meta/prior/speed_lat is an object Dataset
/meta/prior/speed_lon is an object Dataset
/meta/sim is a Group
/meta/sim/cmdline is an object Dataset
【问题讨论】:
-
听起来节点
'data'是一个组而不是数据集。您可以使用isinstance(node, h5py.Dataset)进行测试。结果应该是True。找到数据集后,您可以使用dt = f.get.('datset_name')[:]将其读入数组 -
这不起作用
-
这是进步。它确认
'data'是一个组,这就是您收到错误的原因。它还显示哪些节点是数据集。 [所有的对象数据集让我觉得这是由 MatLab 创建的,这可能会使事情复杂化。] HDF5 是一个通用数据容器。在这一点上,需要理解数据模式来解释数据。架构是否记录在某处?
标签: python arrays numpy hdf5 h5py