Python 读入多个hdf5文件并将其附加到新词典

Python 读入多个hdf5文件并将其附加到新词典,python,dictionary,hdf5,h5py,Python,Dictionary,Hdf5,H5py,我有一个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):

我有一个
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]])
如果我只有一个文件,这很好,但是如果我有两个或更多文件,它似乎会关闭密钥?我不确定这是否就是正在发生的事情,但当我问新的数据dic是什么时,对于它给出的值,
{'Bfs_geo_a':,…
,它不会写入文本文件。我尝试在打开下一个(
rbsp_ephm.close()
)之前关闭hdf5文件,但我得到了相同的错误


感谢所有帮助!

可能不是好的解决方案,但您可以尝试将数据提取为numpy数组,这是一种比h5py数据集更灵活的格式。请参见下面的操作方法:

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

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

我真的不明白您的问题…您正在尝试创建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]}

它回答了您的问题吗?

我正试图从hdf5文件中获取数据并将其放入字典中打开一个新文件并获取该数据,然后将其附加到字典中已有的数据中。似乎发生的情况是,如果您有一个文件,它就可以正常工作,但当您打开第二个文件时,第一个文件就会关闭并被遗忘不,如果你认为这只是在你做
rbsp_ephm[values[j]]
的时候,它不是你处理的实际数据(它是
HDF5数据集
对象),你必须做
rbsp_ephm[values[j][()]
。试着打印这两个数据以确保。。。
{'values/tutu': [2, 5, 8, 11, 14], 'values/toto': [0, 3, 6, 9, 12], 'values/tata': [1, 4, 7, 10, 13]}