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]}