2012-11-05 35 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 ]] [()]'而不是。嘗試打印兩個以確保... –

相關問題