python - 使用 h5py 写入文件的最快方法

标签 python h5py

首先,我阅读了主题“Fastest way to write hdf5 file with Python?”,但没有多大帮助。

我正在尝试加载一个 h5f5 结构中大约 1GB 的文件(大小为 (70133351,1) 的矩阵)。

代码很简单,但是速度很慢。

import h5py
f = h5py.File("8.hdf5", "w")
dset = f.create_dataset("8", (70133351,1))

myfile=open("8.txt")

for line in myfile:
   line=line.split("\t")
   dset[line[1]]=line[0]

myfile.close()
f.close()

我有一个50MB的较小版本的矩阵,我尝试了相同的代码,24小时后还没有完成。

我知道让它更快的方法是避免“for循环”。如果我使用常规 python,我会使用哈希理解。然而,看起来它不适合这里。

我可以稍后通过以下方式查询该文件:

f = h5py.File("8.hdf5")
h=f['8']
print 'GFXVG' in h.attrs 

考虑到 GFXVG 是 h 中的键,这会回答我“正确”

有人有什么想法吗?

文件部分示例:

508 LREGASKW
592 SVFKINKS
1151        LGHWTVSP
131 EAGQIISE
198 ELDDSARE
344 SQAVAVAN
336 ELDDSARF
592 SVFKINKL
638 SVFKINKI
107 PRTGAGQH
107 PRTGAAAA

谢谢

最佳答案

您可以使用 loadtext 将所有数据加载到 numpy 数组 中,并使用它来实例化您的 hdf5 数据集。

import h5py
import numpy as np

d = np.loadtxt('data.txt', dtype='|S18')

返回

array([['508.fna', 'LREGASKW'],
   ['592.fna', 'SVFKINKS'],
   ['1151.fna', 'LGHWTVSP'],
   ['131.fna', 'EAGQIISE'],
   ['198.fna', 'ELDDSARE'],
   ['344.fna', 'SQAVAVAN'],
   ['336.fna', 'ELDDSARF'],
   ['592.fna', 'SVFKINKL'],
   ['638.fna', 'SVFKINKI'],
   ['107.fna', 'PRTGAGQH'],
   ['1197.fna', 'ELDDSARR'],
   ['1309.fna', 'SQTIYVWF'],
   ['974.fna', 'PNNLRFIA'],
   ['230.fna', 'IGKVYHIE'],
   ['76.fna', 'PGVHSVWV'],
   ['928.fna', 'HERGGAND'],
   ['520.fna', 'VLKTDTTG'],
   ['1290.fna', 'EAALDLHR'],
   ['25.fna', 'FCSILGVV'],
   ['284.fna', 'YHKLTFED'],
   ['1110.fna', 'KITSSSDF']], 
  dtype='|S18')

然后

h = h5py.File('data.hdf5', 'w')
dset = h.create_dataset('data', data=d)

给出:

<HDF5 dataset "init": shape (21, 2), type "|S18">

关于python - 使用 h5py 写入文件的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24437550/

相关文章:

python - 为什么h5py数据集并行分配没有输出?

python - 你能在pycharm中查看hdf5文件吗?

python - 查找字符串匹配模式

python - 从 CSV 保存和加载后使用 .pivot() 会导致 KeyError

python - PyO3 在 Rust 中实现 python 可迭代类

python - 不使用 numpy 数组转置 h5py 数据集

python - 如何在 h5py 中为 HDF5 数据集分配比例(或物理尺寸)?

python - Python 中包含图像的 H5 文件 : Want to randomly select without replacement

python - 正确打印完整阵列

python - 将 ast 节点转换为 python 对象