在Python中读取HDF文件的属性

在Python中读取HDF文件的属性,python,pandas,hdf5,hdfstore,hdf,Python,Pandas,Hdf5,Hdfstore,Hdf,我在熊猫中读取hdf文件时遇到问题。到目前为止,我还不知道文件的密钥 在这种情况下,如何读取文件[data.hdf]?而且,我的文件是.hdf而不是.h5,它对数据获取有影响吗 我发现您需要一个“商店中的组标识符” pandas.io.pytables.read_hdf(path_or_buf, key, **kwargs) 我能够从pytables中获取元数据 File(filename=data.hdf, title='', mode='a', root_uep='/', filters=

我在熊猫中读取hdf文件时遇到问题。到目前为止,我还不知道文件的密钥

在这种情况下,如何读取文件[data.hdf]?而且,我的文件是.hdf而不是.h5,它对数据获取有影响吗

我发现您需要一个“商店中的组标识符”

pandas.io.pytables.read_hdf(path_or_buf, key, **kwargs)
我能够从pytables中获取元数据

File(filename=data.hdf, title='', mode='a', root_uep='/', filters=Filters(complevel=0, shuffle=False, fletcher32=False, least_significant_digit=None))
/ (RootGroup) ''
/UID (EArray(317,)) ''
  atom := StringAtom(itemsize=36, shape=(), dflt='')
  maindim := 0
  flavor := 'numpy'
  byteorder := 'irrelevant'
  chunkshape := (100,)
/X Y (EArray(8319, 2, 317)) ''
  atom := Float32Atom(shape=(), dflt=0.0)
  maindim := 0
  flavor := 'numpy'
  byteorder := 'little'
  chunkshape := (1000, 2, 100)
如何通过pandas使其可读?

文档是。但是,您将能够直接阅读熊猫显示的格式。您需要使用PyTables来读取它。pandas可以直接读取PyTables表格格式,即使没有pandas使用的元数据。

首先(.hdf或.h5)没有任何区别。 第二,我不确定熊猫的情况,但我看到HDF5键如下:

import h5py
h5f = h5py.File("test.h5", "r")
h5f.keys()


pyhdf
将是python中hdf文件的替代选项

您可以从以下位置读取和查看密钥:

import pyhdf
hdf = pyhdf.SD.SD('file.hdf')
hdf.datasets()
我希望它能帮助你!
gud luck

您可以使用此简单函数查看HDF文件中任何变量的名称(仅适用于科学模式下的变量)

从pyhdf.SD导入*
def HDFvars(文件):
"""
提取hdf文件的变量名
"""
#hdfFile=SD.SD(文件,模式=1)
hdfFile=SD(文件,模式=1)
dsets=hdfFile.datasets()
k=[]
对于dsets.keys()中的键:
k、 附加(键)
k、 排序()
hdfFile.end()#关闭文件
返回k
如果变量不在科学模式下,您可以尝试使用下面的程序来显示其中包含的vgroups的内容 任何HDF文件

从pyhdf.HDF导入*
从pyhdf.V导入*
从pyhdf.VS导入*
从pyhdf.SD导入*
def描述变量(参考编号):
#用给定的refnum描述vgroup。
#在读取模式下打开vgroup。
vg=v.attach(参考编号)
打印“--------------------”
打印“名称:”,vg.\u名称,“类别:”,vg.\u类别,“标记,参考:”,
打印vg.\u标记,vg.\u参考编号
#显示每个主要对象类型的成员数。
打印“成员:”,vg.\n成员,
打印“数据集:”,vg.nrefs(HC.DFTAG\U NDG),
打印“vdatas:”,vg.nrefs(HC.DFTAG_VH),
打印“vgroups:”,vg.nrefs(HC.DFTAG_vg)
#阅读vg组的内容。
members=vg.tagrefs()
#显示每个成员的信息。
索引=-1
对于标记,在成员中引用:
指数+=1
打印“成员索引”,索引
#Vdata标签
如果标签==HC.DFTAG_VH:
vd=vs.连接(参考)
nrecs、intmode、字段、大小、名称=vd.inquire()
打印“vdata:”,名称,“标记,参考:”,标记,参考
打印“字段:”,字段
打印“nrecs:”,nrecs
vd.detach()
#SDS标签
elif标记==HC.DFTAG\u NDG:
sds=sd.select(sd.reftoindex(ref))
名称、等级、dims、类型、nattrs=sds.info()
打印“数据集:”,名称,“标记,引用:”,标记,引用
打印“dims:”,dims
打印“类型:”,类型
sds.endaccess()
#VS标签
elif tag==HC.DFTAG\u VG:
vg0=v.连接(参考)
打印“vgroup:”,vg0.\u名称,“tag,ref:”,tag,ref
vg0.detach()
#未处理标签
其他:
打印“未处理的标记,参考”,标记,参考
#封闭vg组
vg.detach()
#以只读模式打开HDF文件。
filename='yourfile.hdf'
hdf=hdf(文件名)
#初始化文件上的SD、V和VS接口。
sd=sd(文件名)
vs=hdf.vstart()
v=hdf.vgstart()
#扫描文件中的所有VG组。
ref=-1
而1:
尝试:
ref=v.getid(ref)
打印参考
除了HDF4Error,msg:#没有更多的vgroup
打破
描述(参考)
import pyhdf
hdf = pyhdf.SD.SD('file.hdf')
hdf.datasets()