Python 在文件上创建面。 sd=sd(文件名) vs=hdf.vstart() v=hdf.vgstart() #地理定位场中心 如果类==无: ref=v.findclass('SWATH Vgroup')) 其他: ref=v.findclass(类) #打开类的所有数据 vg=v.连接(参考) #类中的所有字段 members=vg.tagrefs() nrecs=[] 名称=[] 对于标记,在成员中引用: #Vdata标签 vd=vs.连接(参考) #nrecs、intmode、字段、大小、名称=vd.inquire() nrecs.append(vd.inquire()[0])#Vdata的记录数 names.append(vd.inquire()[-1])#Vdata的名称 vd.detach() idx=names.index(变量) var=vs.attach(成员[idx][1]) V=var.read(nrecs[idx]) 变量detach() #终止V、VS和SD接口。 v、 完() vs.end() sd.end() #关闭HDF文件。 hdf.close() 返回np.array(V.ravel())

Python 在文件上创建面。 sd=sd(文件名) vs=hdf.vstart() v=hdf.vgstart() #地理定位场中心 如果类==无: ref=v.findclass('SWATH Vgroup')) 其他: ref=v.findclass(类) #打开类的所有数据 vg=v.连接(参考) #类中的所有字段 members=vg.tagrefs() nrecs=[] 名称=[] 对于标记,在成员中引用: #Vdata标签 vd=vs.连接(参考) #nrecs、intmode、字段、大小、名称=vd.inquire() nrecs.append(vd.inquire()[0])#Vdata的记录数 names.append(vd.inquire()[-1])#Vdata的名称 vd.detach() idx=names.index(变量) var=vs.attach(成员[idx][1]) V=var.read(nrecs[idx]) 变量detach() #终止V、VS和SD接口。 v、 完() vs.end() sd.end() #关闭HDF文件。 hdf.close() 返回np.array(V.ravel()),python,hdf,pyhdf,Python,Hdf,Pyhdf,如果您不知道确切的变量名,可以使用以下程序尝试whit,该程序显示了其中包含的vgroups的内容 任何HDF文件 从pyhdf.HDF导入* 从pyhdf.V导入* 从pyhdf.VS导入* 从pyhdf.SD导入* def描述变量(参考编号): #用给定的refnum描述vgroup。 #在读取模式下打开vgroup。 vg=v.attach(参考编号) 打印“--------------------” 打印“名称:”,vg.\u名称,“类别:”,vg.\u类别,“标记,参考:”, 打印vg

如果您不知道确切的变量名,可以使用以下程序尝试whit,该程序显示了其中包含的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
打破
描述(参考)

正常纬度和经度信息不在hdf文件的科学模式中,这是主要原因,因为
lat=(hdf.select('lat'))[:]
与其他变量不一样。使用以下函数,您可以提取hdf文件中任何类型的变量存储

从pyhdf.HDF导入*
从pyhdf.V导入*
从pyhdf.VS导入*
从pyhdf.SD导入*
def HDFread(文件名、变量、类=无):
"""
在hdf文件的V模式下提取非科学数据的数据
"""
hdf=hdf(文件名,HC.READ)
#初始化文件上的SD、V和VS接口。
sd=sd(文件名)
vs=hdf.vstart()
v=hdf.vgstart()
#地理定位场中心
如果类==无:
ref=v.findclass('SWATH Vgroup'))
其他:
ref=v.findclass(类)
#打开类的所有数据
vg=v.连接(参考)
#类中的所有字段
members=vg.tagrefs()
nrecs=[]
名称=[]
对于标记,在成员中引用:
#Vdata标签
vd=vs.连接(参考)
#nrecs、intmode、字段、大小、名称=vd.inquire()
nrecs.append(vd.inquire()[0])#Vdata的记录数
names.append(vd.inquire()[-1])#Vdata的名称
vd.detach()
idx=names.index(变量)
var=vs.attach(成员[idx][1])
V=var.read(nrecs[idx])
变量detach()
#终止V、VS和SD接口。
v、 完()
vs.end()
sd.end()
#关闭HDF文件。
hdf.close()
返回np.array(V.ravel())
如果您不知道确切的变量名,可以使用以下程序尝试whit,该程序显示了其中包含的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()
#
from pyhdf import SD
hdf = SD.SD('MOD10C2.A2001033.006.2016092173057.hdf')
data = hdf.select('Eight_Day_CMG_Snow_Cover')
lat = (hdf.select('Latitude'))[:]
HDF4Error: select: non-existent dataset
lat = (hdf.select('Lat'))[:]
---------------------------------------------------------------------------
HDF4Error                                 Traceback (most recent call last)
~/anaconda3/lib/python3.6/site-packages/pyhdf/SD.py in select(self, name_or_index)
   1635             try:
-> 1636                 idx = self.nametoindex(name_or_index)
   1637             except HDF4Error:

~/anaconda3/lib/python3.6/site-packages/pyhdf/SD.py in nametoindex(self, sds_name)
   1528         sds_idx = _C.SDnametoindex(self._id, sds_name)
-> 1529         _checkErr('nametoindex', sds_idx, 'non existent SDS')
   1530         return sds_idx

~/anaconda3/lib/python3.6/site-packages/pyhdf/error.py in _checkErr(procName, val, msg)
     22             err = "%s : %s" % (procName, msg)
---> 23         raise HDF4Error(err)

HDF4Error: nametoindex : non existent SDS

During handling of the above exception, another exception occurred:

HDF4Error                                 Traceback (most recent call last)
<ipython-input-11-21e6a4fdf8eb> in <module>()
----> 1 hdf.select('Lat')

~/anaconda3/lib/python3.6/site-packages/pyhdf/SD.py in select(self, name_or_index)
   1636                 idx = self.nametoindex(name_or_index)
   1637             except HDF4Error:
-> 1638                 raise HDF4Error("select: non-existent dataset")
   1639         id = _C.SDselect(self._id, idx)
   1640         _checkErr('select', id, "cannot execute")

HDF4Error: select: non-existent dataset
lon,lat = np.meshgrid(np.arange(-180,180,0.05),np.arange(-90,90,0.05))