使用表而不是h5py访问hdf5文件数据块

问题描述 投票:0回答:1

我使用 h5py 和表格成功读取了从 MSC/Nastran 生成的 hdf5 文件。现在,我尝试对 Simcenter/Nastran 生成的文件执行相同的操作,但遇到了麻烦,因为数据块的名称中包含冒号。

此语法适用于 h5py:

hf=h5py.File(‘solidbeam-3prtfem-sol101.hdf','r')
myElm=hf['model']['geom2:elem_data']['geom2_chexa']

通常我会尝试以下表格:

hft=tables.open_file(‘solidbeam-3prtfem-sol101.hdf','r')
myElmTable=hft/model/geom2:elem_data/geom2_chexa

:
中的
geom2:elem
字符不起作用。

以下语法有效并打印项目名称,如下所示:

for obj in hft:
   print obj

/model/geom2:elem_data/geom2_chexa (Table(40,)) 

您对如何在表中引用该数据块有什么建议吗?

任何帮助将不胜感激。

hdf5 h5py pytables
1个回答
0
投票

正如 @hpaulj 所指出的,变量名称不能包含特殊字符(如

-
:
+
等)。您访问对象的 PyTables(又名表)方法称为“自然命名”。 PyTables 有一个
.get_node()
方法来绕过这个限制,并将使用这些对象名称。注意:当对象名称包含特殊字符时,PyTables 将发出警告,指出您无法使用“自然命名”访问该对象(正如您已经发现的那样)。这只是一个警告。

修改上面的 PyTables 代码:

hft = tables.open_file('solidbeam-3prtfem-sol101.hdf','r')
myElmTable = hft.get_node('/model/geom2:elem_data/geom2_chexa')

顺便说一句,我建议使用 Python 的上下文管理器来打开文件。这样,当您退出该代码块时,该文件会自动关闭。示例:

import tables as tb
with tb.open_file('solidbeam-3prtfem-sol101.hdf','r') as hft:
    myElmTable = hft.get_node('/model/geom2:elem_data/geom2_chexa')
© www.soinside.com 2019 - 2024. All rights reserved.