2012-11-05 36 views
2

我有hdf5文件,我想打开,并在适当的值读入一个新的字典,并最终写入一个文本文件的列表。我不一定知道这些值,因此用户在数组中将它们定义为代码的输入。所需文件的数量由用户想要查看的数据天数决定。阅读在多个HDF5文件,并将其附加到一个新的字典

new_data_dic = {} 

for j in range(len(values)): 
    new_data_dic[values[j]] = rbsp_ephm[values[j]] 
for i in (np.arange(len(filenames_a)-1)+1): 
     rbsp_ephm = h5py.File(filenames_a[i]) 
     for j in range(len(values)): 
      new_data_dic[values[j]].append(rbsp_ephm[values[j]]) 

这工作得很好,如果我只有一个文件,但如果我有两个或更多的似乎关闭键?我不知道这是否是到底发生了什么,但是当我问什么new_data_dic,对于价值它给{'Bfs_geo_a': <Closed HDF5 dataset>,...这将不会写入到一个文本文件中。我试过在打开下一个(rbsp_ephm.close())之前关闭hdf5文件,但我得到相同的错误。

感谢您的帮助!

回答

0

也许不是直接的很好的解决方案,但你可以尝试提取数据作为numpy的阵列,它是一个更灵活的格式,而不是h5py数据集之一。请参阅下面如何做到这一点:

>>> print type(file['Average/u']) 
<class 'h5py.highlevel.Dataset'> 
>>> print type(file['Average/u'][:]) 
<type 'numpy.ndarray'> 

和公正的情况下,你应该尝试用更“Python化”的方式为你的循环,即:

for j in values: 
    new_data_dic[j] = rbsp_ephm[j] 

代替:

for j in range(len(values)): 
    new_data_dic[values[j]] = rbsp_ephm[values[j]] 
0

我真的不明白你的问题......你要创建HDF5数据集的列表? 还是你忘记[()]来访问数据集本身的值?

下面是工作得很好,一个简单的独立例如:

import h5py 

# File creation 
filenames_a = [] 
values = ['values/toto', 'values/tata', 'values/tutu'] 

nb_file = 5 
tmp = 0 
for i in range(nb_file): 
    fname = 'file%s.h5' % i 
    filenames_a.append(fname) 
    file = h5py.File(fname, 'w') 
    grp = file.create_group('values') 
    for value in values: 
     file[value] = tmp 
     tmp += 1 
    file.close() 

# the thing you want 
new_data_dict = {value: [] for value in values} 

for fname in filenames_a: 
    rbsp_ephm = h5py.File(fname, 'r') 
    for value in values: 
     new_data_dict[value].append(rbsp_ephm[value][()]) 

print new_data_dict 

它返回:

{'values/tutu': [2, 5, 8, 11, 14], 'values/toto': [0, 3, 6, 9, 12], 'values/tata': [1, 4, 7, 10, 13]} 

是否回答你的问题?

+0

我试图从HDF5文件中获取数据,并把它转换成字典打开一个新文件,并采取这些数据,它在字典中已经追加到数据。似乎正在发生的事情是,如果你有一个文件,它工作正常,但是当你打开第二个文件时,第一个文件会被关闭并被遗忘。 –

+0

没有如果认为这只是当你'rbsp_ephm [值[J]',它不是实际的数据,你处理(它是'HDF5 dataset'对象)时,你必须做'rbsp_ephm [值[J ]] [()]'而不是。尝试打印两个以确保... –

相关问题