Python 在HDF5中列出组中的数据集

Python 在HDF5中列出组中的数据集,python,hdf5,Python,Hdf5,我决定使用HDF5的层次结构而不是依赖文件系统将数据存储在HDF5中。 不幸的是,我有性能问题 我的数据格式如下: 我有大约70个顶级组,对应于日期,每个组包含大约8000个数据集。 我想查看每天的数据集数量列表: for date in hdf5.keys(): print(len(hdf5[date])) 我发现这需要2+秒/次迭代,这有点令人沮丧 此外,我有两个不同的hdf5文件与上述布局和更大的一个是慢得多 我做错了什么?尝试使用libver-latest标志创建文件: f =

我决定使用HDF5的层次结构而不是依赖文件系统将数据存储在HDF5中。 不幸的是,我有性能问题

我的数据格式如下: 我有大约70个顶级组,对应于日期,每个组包含大约8000个数据集。 我想查看每天的数据集数量列表:

for date in hdf5.keys():
   print(len(hdf5[date]))
我发现这需要2+秒/次迭代,这有点令人沮丧

此外,我有两个不同的hdf5文件与上述布局和更大的一个是慢得多


我做错了什么?

尝试使用libver-latest标志创建文件:

f = h5py.File('name.hdf5', libver='latest') 

如果每个组有很多数据集,或者每个数据集有很多属性,这会快得多。

如果您真的只想查看文件中有哪些数据集,我会使用
h5dump
h5stat
实用程序。例如,
h5stat--dset
将打印文件中所有数据集的相关信息。如果您想要不太详细的信息,只需使用
h5dump-n
,它将打印一般的文件内容,类似于
ls-l
@bnaecker:实际上,我正在用python寻找解决方案。但是运行h5stat--dset花了4分10秒:(谢谢你,John。我没有%timeit,但是从2-3秒/读速度来看似乎没有明显的提高。你正在使用的hdf5库的版本是什么?我创建了一个包含70个组的文件,每个组有8000个数据集,并且能够在0.45秒内完成你描述的循环(对于整个文件)。此外,您可能会看到改进,只需使用“for date in hdf5”而不是“for date in hdf5.keys()”。再次感谢John。不幸的是,问题似乎在于hdf5文件的大小。代码在5 GB文件上运行的速度要比在20 GB文件上运行的速度快得多(具有相同的布局)。我不认为。keys()这是一个问题,我正在使用Python3,它返回一个视图