我使用 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,))
您对如何在表中引用该数据块有什么建议吗?
任何帮助将不胜感激。
正如 @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')