按数据集名称对h5py中的数据集进行排序

2 投票
1 回答
1381 浏览
提问于 2025-04-18 05:02

我正在创建一个h5文件,里面有5个数据集,分别是['a160']和['a1214']。

我想知道怎么才能让这些数据集按照名字排序。

比如,当我用h5dump命令查看我的文件时,得到的结果是:

HDF5 "jjjj.h5" {
GROUP "/" {
   DATASET "a1214" {
      DATATYPE  H5T_IEEE_F32BE
      DATASPACE  SIMPLE { ( 1, 19 ) / ( H5S_UNLIMITED, 19 ) }
      DATA {
      (0,0): 160, 0, 165, 4, 2.29761, 264, 4, 1.74368, 1, 0, 17, 193, 0, 0,
      (0,14): 0, 0, 0, 0, 0
      }
   }
   DATASET "a160" {
      DATATYPE  H5T_IEEE_F32BE
      DATASPACE  SIMPLE { ( 3, 19 ) / ( H5S_UNLIMITED, 19 ) }
      DATA {
      (0,0): 263, 0, 262, 7, 4.90241, 201, 34, 0.348432, 1, 0, 29, 11, 0, 0,
      (0,14): 0, 0, 0, 0, 0,
      }
   }

但是我希望它能按照数据集的名字来排序,我需要h5dump输出的结果是:

HDF5 "jjjj.h5" {
GROUP "/" {
   DATASET "a160" {
      DATATYPE  H5T_IEEE_F32BE
      DATASPACE  SIMPLE { ( 3, 19 ) / ( H5S_UNLIMITED, 19 ) }
      DATA {
      (0,0): 263, 0, 262, 7, 4.90241, 201, 34, 0.348432, 1, 0, 29, 11, 0, 0,
      (0,14): 0, 0, 0, 0, 0,
      }
   }

   DATASET "a1214" {
      DATATYPE  H5T_IEEE_F32BE
      DATASPACE  SIMPLE { ( 1, 19 ) / ( H5S_UNLIMITED, 19 ) }
      DATA {
      (0,0): 160, 0, 165, 4, 2.29761, 264, 4, 1.74368, 1, 0, 17, 193, 0, 0,
      (0,14): 0, 0, 0, 0, 0
      }
   }
}

1 个回答

1

默认情况下,h5dump 会按照名称的升序对 HDF5 文件中的组和属性进行排序:

-q Q, --sort_by=Q    Sort groups and attributes by index Q
-z Z, --sort_order=Z Sort groups and attributes by order Z

Q - is the sort index type. It can be "creation_order" or "name" (default)
Z - is the sort order type. It can be "descending" or "ascending" (default)

在这种情况下,问题是 "a160" 被认为比 "a1214" 大,因为字典排序就是这样工作的('a12' 小于 'a16')。

你无法改变 HDF5 文件内部结构来强制 h5dump 以不同的顺序排序这些数据结构。不过,你可以像这样给你的名称加零填充:

a0040
a0160
a1214

这样一来,标准的字典排序就会按照你想要的方式输出文件。

撰写回答