【问题标题】:h5py: how to use keys() loop over HDF5 Groups and Datasetsh5py:如何在 HDF5 组和数据集上使用 keys() 循环
【发布时间】:2021-08-01 07:40:15
【问题描述】:

print(list(file.keys()))

当我运行这段代码时,我得到:

T00000000,T00000001,T00000002,T00000003, ... ,T00000474

现在,我分析了 T00000000,但我想用 for 循环扫描它们。我不能这样做,因为这是一个字符串。有没有办法做到这一点?

【问题讨论】:

  • 什么是file?你能再显示一点代码吗?
  • 这是一个 HDF5 文件,该文件包括我提到的一些组(T00000000,.....,T00000474),我在 T00000000 上做了一些排列。但我想用 for-loop 对所有组做同样的事情。
  • 您已经在file.keys() 中有一个迭代器。你应该可以使用for key in file.keys(): 来循环它们。
  • 好的,谢谢。我要试试这个。

标签: python numpy hdf5 h5py


【解决方案1】:

是的,您可以使用 split() 方法。

如果字符串是“T00000000,T00000001,T00000002,T00000003, ... ,T00000474”,则可以使用 split 将其打开如下列表:

string = "T00000000,T00000001,T00000002,T00000003, ... ,T00000474"
values = string.split(",")

因此,列表值变为["T00000000", "T00000001","T00000003", ... ,"T000000474"]

然后你可以在 for 循环中使用它。

如果您不想创建列表,您可以:

for value in string.split(","):
     #Your code here...

for 循环将以 T00000000、T00000001、T00000003 的值执行 ...

【讨论】:

    【解决方案2】:

    @python_student,这比最初的答案中解释的要多。根据您问题的语法,您似乎正在使用 h5py 来读取 HDF5 文件。要有效访问文件内容,您需要对 HDF5 和 h5py 有基本的了解。我建议从这里开始:h5py Quick Start Guide。此外,StackOverflow 上有很多很好的问题和答案,其中包含详细信息和示例。

    一个 HDF5 文件有 2 个基本对象:

    • 数据集:类似数组的数据集合
    • :保存数据集和其他组的类似文件夹的容器

    h5py,使用字典语法访问 Group 对象,并使用 NumPy 语法读取 Datasets。 (注意组对象不是 Python 字典——只是“看起来”像它们!)

    如您所述,keys() 是文件根级别的对象名称(组或数据集)。您的代码从组键创建了一个列表:list(file.keys())。一般来说,没有理由这样做。通常,您将迭代 keys()items() 而不是创建列表。

    这是一个简短的代码段,展示了您可以如何执行此操作。一旦我对您的数据架构有了更多了解,我可以添加更多详细信息。 (HDF5 是一种通用数据容器,几乎可以使用任何模式。)

    # loop on names:
    for name in file.keys():
        print(name)
    # loop on names and H5 objects:
    for name, h5obj in file.items():
        if isinstance(h5obj,h5py.Group):
            print(name,'is a Group')
        elif isinstance(h5obj,h5py.Dataset):
            print(name,'is a Dataset')
            # return a np.array using dataset object:
            arr1 = h5obj[:]
            # return a np.array using dataset name:
            arr2 = file[name][:] 
            # compare arr1 to arr2 (should always return True):
            print(np.array_equal(arr1, arr2))
    

    【讨论】:

      猜你喜欢
      • 2016-03-23
      • 2015-10-29
      • 2016-04-04
      • 2016-02-27
      • 2015-04-17
      • 2021-09-24
      • 2016-06-05
      • 2020-10-27
      • 2021-05-14
      相关资源
      最近更新 更多