首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用pyhdf读取HDF4数据集(pyhdf.error.HDF4Error: select:不存在数据集)

无法使用pyhdf读取HDF4数据集(pyhdf.error.HDF4Error: select:不存在数据集)
EN

Stack Overflow用户
提问于 2018-04-05 10:57:46
回答 1查看 2.4K关注 0票数 1

我正在尝试读取一个HDF4文件(https://www.dropbox.com/s/5d40ukfsu0yupwl/MOD13A2.A2016001.h23v05.006.2016029070140.hdf?dl=0)。

代码语言:javascript
复制
import os
import numpy as np
from pyhdf.SD import SD, SDC

# Open file.
FILE_NAME = 'MOD13A2.A2016001.h23v05.006.2016029070140.hdf'
hdf = SD(FILE_NAME, SDC.READ)

# List available SDS datasets.
print (hdf.datasets())

# Read dataset.
DATAFIELD_NAME="1_km_16_days_NDVI"
data2D = hdf.select(DATAFIELD_NAME)
data = data2D[:,:] 

当我执行这个脚本时,我得到以下错误:跟踪(最近一次调用):文件"Test.py",第15行,在data2D = hdf.select(DATAFIELD_NAME)文件"C:\Python35\lib\site-packages\pyhdf\SD.py“中,第1599行,在选择raise HDF4Error(" select : non”) pyhdf.error.HDF4Error: select: non中

我使用了类似的python代码来读取其他HDF4文件,并且运行良好。但在这种情况下,我无法理解问题所在。

EN

回答 1

Stack Overflow用户

发布于 2018-04-06 07:08:22

如果仔细查看print(hdf.datasets())的输出,就会注意到以下一行:

代码语言:javascript
复制
 ...
 '1 km 16 days NDVI': (('YDim:MODIS_Grid_16DAY_1km_VI',
                        'XDim:MODIS_Grid_16DAY_1km_VI'),
                       (1200, 1200),
                       22,
                       0),
 ...

键是数据集的名称。注意,名称使用空格分隔单词,而不是像示例中那样使用下划线。

如果您将DATAFIELD_NAME替换为DATAFIELD_NAME='1 km 16 days NDVI'。即用数据集名称中的空格替换下划线,您的代码将在没有错误的情况下工作。

这足以访问地砖中的数据,但是地理定位需要更多的工作。目前,您已经可以将数据可视化

代码语言:javascript
复制
from matplotlib import pyplot as plt
plt.imshow(data)
plt.colorbar()
plt.show()

剩下要做的是

  • 向科学单位标度
  • 地理定位

另外,请使用pprint模块输出结构复杂的大型字典,即将print(hdf.datasets())替换为

代码语言:javascript
复制
import pprint
...
pprint.pprint(hdf.datasets())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49670685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档