Python 在使用group.visititems时,是否有方法获取数据集或组的父级?

Python 在使用group.visititems时,是否有方法获取数据集或组的父级?,python,python-3.x,h5py,Python,Python 3.x,H5py,我试图将一个h5py文件对象放入树结构中,这样我就可以使用它的功能打印出树的表示,以显示文件的内容,就像linux“tree”命令递归显示目录的内容一样。递归访问文件中所有项的最佳方法是使用Group.visititems方法,并传入我将用于向树中添加节点的函数。以下是我到目前为止的情况: import h5py import argparse import sys from anytree import Node, RenderTree class HDFTree: def __in

我试图将一个h5py文件对象放入树结构中,这样我就可以使用它的功能打印出树的表示,以显示文件的内容,就像linux“tree”命令递归显示目录的内容一样。递归访问文件中所有项的最佳方法是使用Group.visititems方法,并传入我将用于向树中添加节点的函数。以下是我到目前为止的情况:

import h5py
import argparse
import sys
from anytree import Node, RenderTree

class HDFTree:
    def __init__(self,filename):
        self._file = h5py.File(filename,'r')
        self._root = Node(filename)
        self._node_map = {filename:self._root}
        self._create_tree()

    def _add_node(self,name,item):
        #TODO: Figure out way to get parent of fnode
        parent_node = self._node_map[item.parent] # I don't think item.parent is a thing so this wont work
        self._node_map[name] = Node(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()

在意识到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()

Dataset和Group类的name属性显然给出了完整的hdf5路径,因此我使用了一些os.path函数对其进行了清理。

Group和Dataset对象都有一个
parent
属性(参见h5py文档)。谢谢,hpaulj。我发现事实确实如此,并且能够通过一些额外的名称清理来得到我想要的(见下面我的答案)。