【发布时间】:2014-10-13 19:14:44
【问题描述】:
我正在尝试从文本文件(三列浮点数,65341 行,由一个或多个空格分隔)导入数据,并将其保存到 HDF5 文件。我试图将它们保存在一个由文件名定义的三个组的子表中。
所以,对于一个名为“data_a1_b2_c3.dat”的文件,我想要 /data/a1/b2/c3 中的 1x6000 数组(其中 c3 是表)
我可以创建 HDF5 文件和组,但创建表证明是个问题。
这是我目前为止的想法(我省略了文件名解析和错误检查;可行):
import numpy as np
import tables as tb
# load datafile
fname = 'data_a1_b2_c3.dat'
data=np.genfromtxt(fname)
data=data[:,2]
# Open hdf5 file
h5=tb.openFile("h5file.h5",'a')
gp1 = h5.create_group(h5.root,"data")
gp2 = h5.create_group(gp1,"a1")
gp3 = h5.create_group(gp2,"b2")
t = h5.create_table(gp3,"c3",data,'my data')
最后一行抛出如下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/site-packages/tables/file.py", line 1067, in create_table
chunkshape=chunkshape, byteorder=byteorder)
File "/usr/lib64/python2.7/site-packages/tables/table.py", line 842, in __init__
descr_from_dtype(nparray.dtype)
File "/usr/lib64/python2.7/site-packages/tables/description.py", line 759, in descr_from_dtype
for name in dtype_.names:
TypeError: 'NoneType' object is not iterable
我的第一个想法是这与我的数据数组有关。但是,我是 Python 新手,目前 SciPi 文档站点已关闭(有人有镜像吗?!)(http://www.isup.me/http://docs.scipy.org/doc/numpy/)
我的数组的形状看起来很奇怪,但类型看起来差不多。有什么想法吗?
>>> data.shape
(65341,)
>>> data.dtype
dtype('float64')
有关信息,这是我正在导入的数据文件的前三行(只需要第三列)
0.250000000000000 0.250000000000000 584.469683289793
0.250000000000000 1.00000000000000 840.153369718130
0.250000000000000 2.00000000000000 821.242731813009
【问题讨论】:
-
您有时可以通过在cachedpages.com 上搜索 URL 来找到网页的缓存版本。这是截至 2014 年 7 月 3 日的archived snapshot of docs.scipy.org。
-
我很确定这里的问题是数据是一个 ndarray 并且使用 pytables 的示例都使用类或recarrays。 (pytables.github.io/usersguide/tutorials.html) 如果你在别处使用pytables 继续插,不然单独使用h5py接口不是太难。docs.h5py.org/en/2.3
标签: python numpy hdf5 pytables h5py