gpt4 book ai didi

python - 使用正则表达式检查数据集是否存在,无需先读取所有数据集的路径

转载 作者:行者123 更新时间:2023-12-01 09:22:16 24 4
gpt4 key购买 nike

如何使用正则表达式之类的东西检查数据集是否存在,而不首先读取所有数据集的路径?

例如,我想检查数据集 'completed' 是否存在于可能(或可能不)包含的文件中

/123/completed

(假设我事先不知道完整路径,我只想检查数据集名称。因此 this answer 在我的情况下不起作用。)

最佳答案

自定义递归

不需要正则表达式。您可以通过递归遍历 HDF5 文件中的组来构建数据集名称:

import h5py

def traverse_datasets(hdf_file):

"""Traverse all datasets across all groups in HDF5 file."""

def h5py_dataset_iterator(g, prefix=''):
for key in g.keys():
item = g[key]
path = '{}/{}'.format(prefix, key)
if isinstance(item, h5py.Dataset): # test for dataset
yield (path, item)
elif isinstance(item, h5py.Group): # test for group (go down)
yield from h5py_dataset_iterator(item, path)

with h5py.File(hdf_file, 'r') as f:
for (path, dset) in h5py_dataset_iterator(f):
yield path.split('/')[-1]

all_datasets = set(traverse_datasets('file.h5'))

然后只需检查成员资格:'completed' in all_datasets

群组.访问

或者,您可以使用Group.visit。请注意,您需要搜索函数返回 None 来迭代所有组。

res = []

def searcher(name, k='completed'):
""" Find all objects with k anywhere in the name """
if k in name:
res.append(name)
return None

with h5py.File('file.h5', 'r') as f:
group = f['/']
group.visit(searcher)

print(res) # print list of dataset names matching criterion

这两种情况的复杂度都是 O(n)。您需要测试每个数据集的名称,但仅此而已。如果您需要惰性解决方案,第一个选项可能更可取。

关于python - 使用正则表达式检查数据集是否存在,无需先读取所有数据集的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50720523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com