首先,我阅读了主题“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
由于
答案 0 :(得分:1)
您可以使用numpy array
将所有数据加载到loadtext
,并使用它来实例化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">
答案 1 :(得分:0)
由于它只有一个gb,为什么不首先将它完全加载到内存中?请注意,您似乎也使用str
索引到dset,这很可能是个问题。
我刚才意识到我误解了最初的问题,抱歉。看起来你的代码试图使用索引1,它似乎是一个字符串,作为索引?也许有一个错字?
import h5py
from numpy import zeros
data = zeros((70133351,1), dtype='|S8') # assuming your strings are all 8 characters, use object if vlen
with open('8.txt') as myfile:
for line in myfile:
idx, item = line.strip().split("\t")
data[int(line[0])] = line[1]
with h5py.File('8.hdf5', 'w') as f:
dset = f.create_dataset("8", (70133351, 1), data=data)
答案 2 :(得分:0)
我最终使用库搁置(Pickle versus shelve storing large dictionaries in Python)将大字典存储到文件中。我只花了2天时间将哈希写入文件,但一旦完成,我就能够非常快速地加载和访问任何元素。在一天结束的时候,我不必阅读我的大文件并在has中写下所有信息,并做任何我想用哈希做的事情。
问题解决了!