После осознания того, что оба класса Dataset и Group действительно имеют родительский атрибут (также отмеченный hpaulj в комментарии к вопросу) и некоторую очистку данных, я смог получить вывод, который мне нужен:
import h5py
import os
from anytree import Node, RenderTree
class HDFTree:
def __init__(self,filepath):
self._file = h5py.File(filepath,'r')
_,filename = os.path.split(filepath)
root_name,_ = os.path.splitext(filename)
self._root = Node(root_name)
self._node_map = {'':self._root}
self._create_tree()
def _add_node(self,name,item):
_,parent_name = os.path.split(item.parent.name)
parent_node = self._node_map[parent_name]
_,child_name = os.path.split(name)
self._node_map[child_name] = Node(child_name,parent=parent_node)
def _create_tree(self):
self._file.visititems(self._add_node)
def print_tree(self):
print(RenderTree(self._root))
def __del__(self):
self._file.close()
Атрибут name классов Dataset и Group, по-видимому, дает полный путь hdf5, поэтому я очистил его с помощью некоторых функций os.path.