首页 > 解决方案 > 在 R 中查找 HDF5 文件的所有属性 - 显示与 Python 不同

问题描述

Python

.h5使用表包和代码在 Python 中打开文件时:

import tables as ta
h5 = ta.open_file("file.h5")

文件对象在“变量”窗口中h5有大量节点可见。我正在寻找的信息在root节点(type{RootGroup})内。具体有三个子节点:

1) _v_attrs类型{AttributeSet}

2)annotation类型{Group}

3)data类型{Group}

当我通过Python访问时,这些都是可用的。IEtz = h5.root._v_attrs.record_timezone

R

我试图在R中读取这些相同的节点,但我没有看到所有不同的节点。hdf5当我使用包列出 HDF5 文件的内容时

library(rhdf5)
h5ls("file.h5")

我只看到组,即只能看到annotationdata节点。

                  group       name       otype   dclass     dim
0                      / annotation   H5I_GROUP                 
1            /annotation      epoch   H5I_GROUP                 
2      /annotation/epoch      dad12 H5I_DATASET COMPOUND      21
3      /annotation/epoch      dad18 H5I_DATASET COMPOUND      21
4      /annotation/epoch      dad24 H5I_DATASET COMPOUND      22
5      /annotation/epoch       dad4 H5I_DATASET COMPOUND      21
6      /annotation/epoch       hour H5I_DATASET COMPOUND     528
7            /annotation  hrv_rmssd   H5I_GROUP                 
8  /annotation/hrv_rmssd      dad12 H5I_DATASET COMPOUND       0
9  /annotation/hrv_rmssd      dad18 H5I_DATASET COMPOUND       0
10 /annotation/hrv_rmssd      dad24 H5I_DATASET COMPOUND       0
11 /annotation/hrv_rmssd       dad4 H5I_DATASET COMPOUND       0
12 /annotation/hrv_rmssd       hour H5I_DATASET COMPOUND       0
13           /annotation        raw   H5I_GROUP                 
14       /annotation/raw      dad12 H5I_DATASET COMPOUND       0
15       /annotation/raw      dad18 H5I_DATASET COMPOUND       0
16       /annotation/raw      dad24 H5I_DATASET COMPOUND       0
17       /annotation/raw       dad4 H5I_DATASET COMPOUND       0
18       /annotation/raw       hour H5I_DATASET COMPOUND       0
19                     /       data   H5I_GROUP                 
20                 /data      epoch H5I_DATASET COMPOUND 1051172
21                 /data        raw H5I_DATASET COMPOUND       0

这些可以使用代码data <- h5read("file.h5", "/data/epoch")作为示例进行访问。

问题

如何AttributeSet在 R 中读取其他类型的节点?

标签: pythonrattributeshdf5

解决方案


也许您想看看HDFql,因为它不仅可以减轻您对 HDF5 低级细节的困扰,而且在处理 HDF5 文件时还可以促进跨不同编程语言的代码可移植性(即 HDFql 保证最终结果始终与语言无关)无需对代码进行太多更改即可使用)。

在使用 HDFql 的 Python 中,您可以通过执行以下示例来检索对象(即组或数据集)的属性:

import HDFql

HDFql.execute("SHOW ATTRIBUTE my_file.h5 my_object/")

while HDFql.cursor_next() == HDFql.SUCCESS:

   print("Attribute found: %s" % HDFql.cursor_get_char())

在使用 HDFql 的 R 中,这与在 Python 中几乎相同(参见相似性):

source("HDFql.R")

hdfql_execute("SHOW ATTRIBUTE my_file.h5 my_object/")

while(hdfql_cursor_next() == HDFQL_SUCCESS)
{
   print(paste("Attribute found:", hdfql_cursor_get_char()))
}

如果您需要检索存储在 HDF5 文件中的所有对象的所有属性(以递归方式),请在 Python 中执行以下操作(在 R 中它将与此非常相似,因此我将跳过发布它):

import HDFql

HDFql.execute("SHOW ATTRIBUTE my_file.h5 / LIKE **")

while HDFql.cursor_next():

   print("Attribute found: %s" % HDFql.cursor_get_char())

可以在此处找到有关如何在 Python 和 R 中使用 HDFql 的其他示例。


推荐阅读