【问题标题】:follow softlinks when reading file in h5py在 h5py 中读取文件时遵循软链接
【发布时间】:2023-01-05 17:04:32
【问题描述】:

我有一个 hdf5 文件,其中有一个包含 Nx3 矩阵的大数据集,用于存储 3D 位置。该数据集在多个使用软链接的组中引用,如下面的层次结构所示

/
/POINTS (the big dataset)
/mesh0
/mesh0/POINTS (softlink to /POINTS)
/mesh1
/mesh1/POINTS (softlink to /POINTS)

但是,为了使用 h5py 加载它,我迭代了我的组,如果我找到了一个网格(一个具有称为网格的属性的组),我假设有一个 POINTS 数据集并解析它。问题是这是为每个 POINTS 数据集创建新的 numpy 矩阵。

# This creates a new numpy array, which is inefficient is we are dealing with softlinks
points = mesh_group["POINTS"][::]

我想知道如何检查数据集的链接是否是软链接,因此我只能创建一次矩阵。

【问题讨论】:

    标签: h5py hdf


    【解决方案1】:

    要在使用 h5py 读取文件时跟踪软链接,可以使用 h5py.File.visit() 方法。此方法允许您遍历 HDF5 文件的层次结构并访问其中的所有组和数据集。 导入 h5py

    打开文件

    f = h5py.File('myfile.hdf5', 'r')

    定义将为每个组或数据集调用的回调函数

    def visit_callback(名称): # 获取指定名称的对象 obj = f[名称]

    # If the object is a softlink, follow it and print the target object's name
    if isinstance(obj, h5py.SoftLink):
        target_obj = obj.resolve()
        print(f'{name} is a softlink to {target_obj.name}')
    # Otherwise, just print the object's name
    else:
        print(name)
    

    访问文件中的所有对象并为每个对象调用回调函数

    f.visit(visit_callback)

    关闭文件

    f.close() 此代码将打开文件“myfile.hdf5”,然后遍历层次结构并为文件中的每个组和数据集调用 visit_callback() 函数。如果对象是软链接,回调函数将跟随链接并打印目标对象的名称。如果对象不是软链接,回调函数将简单地打印对象的名称。

    【讨论】:

      猜你喜欢
      • 2015-10-13
      • 1970-01-01
      • 2016-01-23
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多