2016-12-30 147 views
0

我想遍历.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' 

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

回答

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') 
    ## 

你循环通过文件名列表,并在同一时间提供一个文件名

我希望这会有所帮助。

+0

是的,它的工作,谢谢你很多! – Markus