我有一个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 :(得分:0)
也许不是直接好的解决方案,但你可以尝试将数据提取为numpy数组,这是一种更灵活的格式而不是h5py数据集。请参阅以下如何操作:
>>> print type(file['Average/u'])
<class 'h5py.highlevel.Dataset'>
>>> print type(file['Average/u'][:])
<type 'numpy.ndarray'>
为了以防万一,您应该尝试使用更“pythonic”的方式进行循环,即:
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]]
答案 1 :(得分: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]}
它能回答你的问题吗?