Как зациклить группы HDF5 в Python, удаляя строки в соответствии с маской?
правильно ли добавляется список (есть и другие примеры [h5py] visit
).
Аргумент для visit
должен быть вызван, то есть функция:
results = []
obj.visit(results.append(func(obj,results))
TypeError: 'NoneType' object is not callable
results.append(....)
- это полный вызов функции, который python
выполняет еще до вызова visit
. Результат этого добавления к списку None
(добавление на месте). Так эффективно вы просто делаете
results=[]
results.append(func(obj, results))
obj.visit(None)
Я думаю, тебе нужно что-то вроде
def func(name,obj):
attribute = obj.attr.get('attribute_group')
if attribute == 2:
result = name
print(result)
results.append(result)
obj.visit(func)
Помните, что аргумент, который вы указываете visit
, должен быть оцененной функцией, а не результатом вызова какой-либо функции. Это должно быть callable
.
Я создал файл с одной группой и двумя наборами данных
In [24]: results = []
In [25]: f.visit(results.append)
In [26]: results
Out[26]: ['agroup', 'agroup/bar', 'agroup/foo']
Просмотр имени и объекта ссылки:
In [27]: def func(name):
...: print(name, f[name])
...:
In [28]: f.visit(func)
agroup <HDF5 group "/agroup" (2 members)>
agroup/bar <HDF5 dataset "bar": shape (6,), type "<i8">
agroup/foo <HDF5 dataset "foo": shape (3,), type "<i8">
или с более сложной функцией:
def func(name):
obj = f[name]
attr = list(obj.attrs.items())
print(name, obj, attr)
x = obj.attrs.get('x',None)
if x: # not none
results.append((name, x))
In [35]: results=[]
In [36]: f.visit(func)
agroup <HDF5 group "/agroup" (2 members)> []
agroup/bar <HDF5 dataset "bar": shape (6,), type "<i8"> [('x', 10)]
agroup/foo <HDF5 dataset "foo": shape (3,), type "<i8"> [('x', 1)]
In [37]: results
Out[37]: [('agroup/bar', 10), ('agroup/foo', 1)]
Снова глядя на групповые документы, я вижу, что есть метод visititems
:
def func(name, obj):
attr = list(obj.attrs.items())
print(name, obj, attr)
x = obj.attrs.get('x',None)
if x: # not none
results.append((name, x))
In [45]: results=[]
In [46]: f.visititems(func)
agroup <HDF5 group "/agroup" (2 members)> []
agroup/bar <HDF5 dataset "bar": shape (6,), type "<i8"> [('x', 10)]
agroup/foo <HDF5 dataset "foo": shape (3,), type "<i8"> [('x', 1)]
In [47]: results
Out[47]: [('agroup/bar', 10), ('agroup/foo', 1)]