使用Python的h5py包读取HDF文件时出现错误

3

我想从我从MODIS网站下载的hdf文件中提取数据。链接中提供了一个示例文件。我正在使用以下代码读取hdf文件:

>>> import h5py
>>> f = h5py.File( 'MYD08_M3.A2002182.051.2008334061251.psgscs_000500751197.hdf', 'r' )

The error I am getting:

Traceback (most recent call last):
    File "<pyshell#3>", line 1, in <module>
f = h5py.File( 'MYD08_M3.A2002182.051.2008334061251.psgscs_000500751197.hdf', 'r' )
    File "C:\Python27\lib\site-packages\h5py\_hl\files.py", line 165, in __init__
fid = make_fid(name, mode, userblock_size, fapl)
    File "C:\Python27\lib\site-packages\h5py\_hl\files.py", line 57, in make_fid
fid = h5f.open(name, h5f.ACC_RDONLY, fapl=fapl)
    File "h5f.pyx", line 70, in h5py.h5f.open (h5py\h5f.c:1640)
IOError: unable to open file (File accessability: Unable to open file)

我尝试了其他几个来自不同源头的hdf文件,但是我一直得到相同的错误。在这里似乎出了什么问题?

3个回答

5
我认为可能存在两个问题:
1)由于文件扩展名为“hdf”,可能是HDF4文件。HDF5文件通常具有“.hdf5”或“.h5”扩展名。我不确定h5py能否读取HDF4文件。
2)也许您需要更改文件本身的权限。如果您在Linux机器上,请尝试:chmod +r file.hdf 您可以尝试使用HDFView打开文件。此软件在多个平台上都可用。您可以很容易地使用它查看文件的属性。

感谢您的回复。我使用HDFView来可视化hdf文件中的数据,它可以正常工作,而且这些文件是hdf4格式的。所以正如您所说,问题肯定是由于h5py无法支持hdf4格式所导致的。我发现了一个名为pyhdf的库,它支持hdf4格式。我想这会解决我的问题。顺便说一下,我没有进行chmod操作,我正在使用Windows系统。 - Yash
1
太好了!希望你能用 pyhdf 完成你的工作。 - Iñigo Hernáez Corres
2
另一种选择是使用 h4toh5 将文件转换为 HDF5 格式。这样可以依赖于最新的工具。该工具可在 项目主页 上获取。 - Eric Platon

2
这听起来像是文件权限错误,甚至可能是文件不存在。可以添加一些检查,例如:
import os

hdf_file = 'MYD08_M3.A2002182.051.2008334061251.psgscs_000500751197.hdf'

if not os.path.isfile(hdf_file):
    print 'file %s not found' % hdf_file

if not os.access(hdf_file, os.R_OK):
    print 'file %s not readable' % hdf_file

f = h5py.File(hdf_file, 'r')

感谢回复。文件确实存在,事实上有139个,但为了确保我执行了您建议的检查,循环遍历文件夹中的每个文件以查找文件是否存在并且可访问。 - Yash

0
我曾经遇到过同样的问题,后来发现我的文件只有“只读”权限,这似乎阻止了h5py的读取。将权限修改为“可写”后,我就能够读取它了。不确定为什么会设置成这样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接