Python 将h5py数据集输出为文本的快速方法是什么?
我正在使用h5py python包读取HDF5格式的文件。(例如somefile.h5) 我想将数据集的内容写入文本文件 例如,我想创建一个包含以下内容的文本文件: 1,20,31,75142324,78,12,3,90,8,21,1 我可以使用以下代码访问python中的数据集: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
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