当前位置: 代码迷 >> python >> 使用python itertools遍历具有组和子组的HDF文件
  详细解决方案

使用python itertools遍历具有组和子组的HDF文件

热度:50   发布时间:2023-06-14 08:51:08.0

我想解析具有以下格式的HDF文件

HDFFile/
    Group1/Subgroup1/DataNDArray
          ...
          /SubgroupN/DataNDArray
    ...
    GroupM/Subgroup1/DataNDArray
          ...
          /SubgroupN/DataNDArray

我正在尝试使用itertools.product,但在第二个迭代器MWE上使用的卡住了:

from itertools import *
import h5py

hfilename = 'data.hdf'
with h5py.File(hfilename, 'r') as hfile:
    for group, subgroup, dim in product(hfile.itervalues(), ????, range(10));
        parse(group, subgroup, dim)

显然,我的问题是第二个迭代器将依赖于第一个迭代器的提取值,而后者不能在同一个衬套中使用。

我知道可以使用for循环或以下示例进行操作:

with h5py.File(hfilename, 'r') as hfile:
    for group in hfile.itervalues():
        for subgroup, dim in product(group.itervalues(), range(10)):
            parse(group, subgroup, dim)

但我想知道是否有一种方法可以在一次itertools运行中做到这一点。

第二个迭代器是否依赖于第一个迭代器的提取值? 从您的示例来看,似乎每个组中都有N个子组。

具有列表推导和()生成器(而不是product )的解决方案如下所示:

M = 3
N = 2

a = ['Group' + str(m) for m in range(1, M + 1)]
b = ['Subgroup' + str(n) for n in range(1, N + 1)]
c = ('{}/{}/DataNDArray'.format(ai, bi) for ai in a for bi in b)

for key in c:
    print(key)

并打印:

Group1/Subgroup1/DataNDArray
Group1/Subgroup2/DataNDArray
Group2/Subgroup1/DataNDArray
Group2/Subgroup2/DataNDArray
Group3/Subgroup1/DataNDArray
Group3/Subgroup2/DataNDArray

这应该是您想要的。

  相关解决方案