python - 读取多个 hdf5 文件并将它们附加到新字典

标签 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):
        rbsp_ephm = h5py.File(filenames_a[i])
        for j in range(len(values)):
            new_data_dic[values[j]].append(rbsp_ephm[values[j]])

如果我只有一个文件,这工作正常,但如果我有两个或更多,它似乎关闭 key ?我不确定这是否正是正在发生的事情,但是当我问什么 new_data_dic是,对于它给出的值 {'Bfs_geo_a': <Closed HDF5 dataset>,...这不会写入文本文件。我试过在打开下一个 (rbsp_ephm.close()) 之前关闭 hdf5 文件,但我得到了同样的错误。

感谢所有帮助!

最佳答案

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

它能回答您的问题吗?

关于python - 读取多个 hdf5 文件并将它们附加到新字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13241391/

相关文章:

python - 使用 python 通过套接字将字符串从 Windows 发送到 vmware-ubuntu

python - 按列表中项目的顺序对 python 字典进行排序

C# 单击按钮时从字典中随机输入

python - 如何将 Pandas DataFrame 存储为 HDF5 PyTables 表(或 CArray、EArray 等)?

c# - 需要确保 C# HDF5 输出(属性)与 Visual C++ 相同。或者 C# 中与 C++ 等效的 HDF5 格式是什么

python - 使用 pandas 将表直接转换为树结构

python - Windows 上的 pyodbc 和 python 3.4

python - 将 utf-8 写入 Excel CSV

python - 使用 python 和 __repr__ 打印嵌套对象

java - hql 查询获取以父表 id 作为键、以子对象列表作为值的映射