Python 将h5py数据集输出为文本的快速方法是什么?

Python 将h5py数据集输出为文本的快速方法是什么?,python,text,hdf5,h5py,Python,Text,Hdf5,H5py,我正在使用h5py python包读取HDF5格式的文件。(例如somefile.h5) 我想将数据集的内容写入文本文件 例如,我想创建一个包含以下内容的文本文件: 1,20,31,75142324,78,12,3,90,8,21,1 我可以使用以下代码访问python中的数据集: import h5py f = h5py.File('/Users/Me/Desktop/thefile.h5', 'r') group = f['/level1/level2/level3'] dset

我正在使用h5py python包读取HDF5格式的文件。(例如somefile.h5) 我想将数据集的内容写入文本文件

例如,我想创建一个包含以下内容的文本文件: 1,20,31,75142324,78,12,3,90,8,21,1

我可以使用以下代码访问python中的数据集:

import h5py
f     = h5py.File('/Users/Me/Desktop/thefile.h5', 'r')
group = f['/level1/level2/level3']
dset  = group['dsetname']
我的天真方法太慢,因为我的数据集有20000多个条目:

# write all values to file        
for index in range(len(dset)):
        # do not add comma after last value
        if index == len(dset)-1: txtfile.write(repr(dset[index]))
        else:                    txtfile.write(repr(dset[index])+',')
txtfile.close()
    return None
有没有更快的方法将其写入文件?也许我可以将数据集转换成NumPy数组,甚至是Python列表,然后使用一些文件编写工具


(在写入文件之前,我可以尝试将值连接到一个更大的字符串中,但我希望有一个更优雅的方法)

构建一个大字符串具有巨大的优势,可以省去愚蠢的“上次切换”,这要感谢优秀的
连接
字符串方法:替换整个循环,

txtfile.write(','.join(repr(item) for item in dset))

我不确定您对代码的要求有多高……;-)

可能在HDF5文件上使用h5dump

我使用(bash)


您最初的怀疑是正确的,首先将其转换为Numpy数组,然后将该数组转储为ASCII

my_data = my_h5_group['dsetname'].value # is now a Numpy array
my_data.tofile("my_data.txt")

这将比在组对象本身上迭代快得多。

哦,我做了同样的事情,我找到了方法。 例如,如果您希望像这样访问

print( hdf5['a'][i][j][k] )
这是非常非常缓慢的。像这样做

arr=hdf5[:] # at the out of loop
print( arr[i][j][k] ) # in the loop

只有这一微小的改变才会成功。

在Python中,使用
range(len(dset))
几乎总是一个坏主意。总是喜欢迭代器,特别是对于大型的
dset
range
实际上正在创建和分配一个
len(dset)
整数列表。sudo apt get install hdf5 tools这并没有将其转换为ascii。很抱歉,请使用
my_data.tofile('my_data.txt',sep='',format='%f'))
或有关更多选项,请使用
numpy.savetxt
arr=hdf5[:] # at the out of loop
print( arr[i][j][k] ) # in the loop