如何在Python中读取HDF5文件

时间:2015-01-27 12:32:57

标签: python hdf5

我正在尝试从Python中读取hdf5文件中的数据。我可以使用h5py读取hdf5文件,但我无法弄清楚如何访问文件中的数据。

我的代码

import h5py    
import numpy as np    
f1 = h5py.File(file_name,'r+')    

这样可以读取文件。但是如何访问文件对象f1中的数据?

10 个答案:

答案 0 :(得分:73)

阅读HDF5

import h5py
filename = 'file.hdf5'
f = h5py.File(filename, 'r')

# List all groups
print("Keys: %s" % f.keys())
a_group_key = list(f.keys())[0]

# Get the data
data = list(f[a_group_key])

写HDF5

#!/usr/bin/env python
import h5py

# Create random data
import numpy as np
data_matrix = np.random.uniform(-1, 1, size=(10, 3))

# Write data to HDF5
data_file = h5py.File('file.hdf5', 'w')
data_file.create_dataset('group_name', data=data_matrix)
data_file.close()

有关详细信息,请参阅h5py docs

替代

对于您的应用程序,以下内容可能很重要:

  • 其他编程语言的支持
  • 阅读/写作表现
  • 紧凑性(文件大小)

另请参阅:Comparison of data serialization formats

如果您正在寻找制作配置文件的方法,您可能需要阅读我的简短文章Configuration files in Python

答案 1 :(得分:15)

你可以使用熊猫。

import pandas as pd
pd.read_hdf(filename,key)

答案 2 :(得分:5)

阅读文件

import h5py

f = h5py.File(file_name, mode)

通过打印存在的HDF5组来研究文件的结构

for key in f.keys():
    print(key) #Names of the groups in HDF5 file.

提取数据

#Get the HDF5 group
group = f[key]

#Checkout what keys are inside that group.
for key in group.keys():
    print(key)

data = group[some_key_inside_the_group].value
#Do whatever you want with data

#After you are done
f.close()

答案 3 :(得分:2)

要读取.hdf5文件的内容作为数组,可以执行以下操作

FROM camunda/camunda-bpm-platform:tomcat-7.7.0

COPY build/libs/*.war /camunda/webapps/

答案 4 :(得分:1)

您需要做的是创建数据集。如果您查看快速入门指南,它会向您显示您需要使用文件对象来创建数据集。所以,f.create_dataset然后你就可以读取数据了。这在docs

中有解释

答案 5 :(得分:1)

使用以下代码读取数据并将其转换为numpy数组

    filename = MC.filename;
    filename_txt = MC.filename_txt;
    version = MC.version;
    A = MC.A;
    B = MC.B;
    ...and so on for the 100 or so variables.

答案 6 :(得分:0)

这是我刚刚编写的一个简单函数,它读取由keras中的save_weights函数生成的.hdf5文件,并返回包含图层名称和权重的字典:

def read_hdf5(path):

    weights = {}

    keys = []
    with h5py.File(path, 'r') as f: # open file
        f.visit(keys.append) # append all keys to list
        for key in keys:
            if ':' in key: # contains data if ':' in key
                print(f[key].name)
                weights[f[key].name] = f[key].value
    return weights

https://gist.github.com/Attila94/fb917e03b04035f3737cc8860d9e9f9b

还没有对其进行彻底的测试,但是为我完成了工作。

答案 7 :(得分:0)

from keras.models import load_model 

h= load_model('FILE_NAME.h5')

答案 8 :(得分:0)

使用该问题的答案以及最新的doc,我能够使用

提取数值数组
import h5py
with h5py.File(filename, 'r') as h5f:
    h5x = h5f[list(h5f.keys())[0]]['x'][()]

在这里,'x'只是X坐标。

答案 9 :(得分:0)

如果您在hdf文件中命名了数据集,则可以使用以下代码来读取和转换numpy数组中的这些数据集:

import h5py
file = h5py.File('filename.h5', 'r')

xdata = file.get('xdata')
xdata= np.array(xdata)

如果文件位于其他目录中,则可以在'filename.h5'前面添加路径。