如何快速将h5py数据集输出为文本?
我正在使用h5py这个Python包来读取HDF5格式的文件,比如说某个文件叫做somefile.h5。
我想把数据集里的内容写入一个文本文件。
举个例子,我想创建一个文本文件,里面的内容是这样的:1,20,31,75,142,324,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列表,然后再用某种写文件的工具?
(我可以尝试把这些值拼接成一个更大的字符串再写入文件,但我希望能有更优雅的解决方案。)
4 个回答
2
也许可以用 h5dump 来查看 HDF5 文件?
我用的是 (bash)
(h5dump -y -o /dev/stderr -d $dataset $infile >$errorout) 2>&1 | sed -e 's/, /\n/g' -e 's/,$//' | sed 's/ //g' > $outfile 2> $errorout
3
你最开始的想法是对的,首先把它转换成一个Numpy数组,然后再把这个数组保存为ASCII格式。
my_data = my_h5_group['dsetname'].value # is now a Numpy array
my_data.tofile("my_data.txt")
这样做会比直接遍历这个组对象快很多。
5
构建一个很大的字符串有一个很大的好处,就是可以避免那些奇怪的“最后一次切换”问题,这要归功于字符串的优秀方法join
:你可以用它来替代整个循环。
txtfile.write(','.join(repr(item) for item in dset))
我不太确定你希望你的代码有多优雅...;-)