循环遍历HDF5文件列表

时间:2016-12-30 18:15:13

标签: python-2.7 hdf5

我想循环遍历.HDF5数据文件列表,并在此之后进行一些操作。因此,为了不对每个文件单独进行操作,我想循环它。 我做了以下......

import os
import h5py

# Read in 2A.GPM.DPR
os.chdir('/home/unix/Desktop/source')
file_name = ['2A.GPM.DPR.V6-20160118.20150620-S060925-E074157.007431.V04A.HDF5',
             '2A.GPM.DPR.V6-20160118.20150801-S100900-E114133.008087.V04A.HDF5']
for n in file_name:
    print n
    #
    f = h5py.File(file_name, 'r')
    ##

之后我收到以下错误

    ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-26-e6813194d502> in <module>()
      6     print n
      7     #
----> 8     f = h5py.File(file_name, 'r')

/home/unix/anaconda2/lib/python2.7/site-packages/h5py/_hl/files.pyc in __init__(self, name, mode, driver, libver, userblock_size, swmr, **kwds)
    265                     # encoding, just pass it on as-is.  Note Unicode
    266                     # objects can always be encoded.
--> 267                     name = name.encode(sys.getfilesystemencoding())
    268                 except (UnicodeError, LookupError):
    269                     pass

AttributeError: 'list' object has no attribute 'encode'

所以你知道这个错误是什么吗? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您没有打开文件,而是向.File方法提供列表。您应该将代码更改为以下内容:

import os
import h5py

# Read in 2A.GPM.DPR
os.chdir('/home/unix/Desktop/source')
file_names = ['2A.GPM.DPR.V6-20160118.20150620-S060925-E074157.007431.V04A.HDF5',
             '2A.GPM.DPR.V6-20160118.20150801-S100900-E114133.008087.V04A.HDF5']
for file_name in file_names:
    print file_name
    #
    f = h5py.File(file_name, 'r')
    ##

您循环浏览文件名列表,并一次提供 一个文件名

我希望这会有所帮助。