如何快速将h5py数据集输出为文本?

4 投票
4 回答
7177 浏览
提问于 2025-04-15 23:50

我正在使用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))

我不太确定你希望你的代码有多优雅...;-)

撰写回答