从sqlite3 BLOB(x,y数据)到numpy数组?

时间:2017-10-03 18:30:23

标签: python-3.x numpy sqlite

我将(x,y)数据存储到sqlite3数据库中,它们显示为“BLOB”。例如。第一个BLOB的大小为5653。

为了阅读第一个BLOB,我使用:

db = sqlite3.connect(sqlite_db)
cur = db.cursor()
cur.execute('SELECT spectrum FROM spectra WHERE rowid=1')
sample_xy_blob = cur.fetchone()[0]
print(sample_xy_blob)
print(type(sample_xy_blob))

sample_xy_np = np.loadtxt( sample_xy_blob)
print(sample_xy_np)
print(type(sample_xy_np))
db.close()

打印输出如下所示:

>>> b'94.075\t.1\r\n95.057\t.4\r\n96.050\t2.8\r\n97.034\t3.8\r\n97.094\t.3\r\n97.143\t.1\r\n98.040\t.2\r\n98.066\t.4\r\n99.050\t6.0\r\n99.188\t.1\r\n100.053\t.2\r\n100.078\t.2\r\n101.065\t.6\r\n102.061\t.2\r\n103.049\t1.6\r\n103.143\t.1\r\n104.067\t.1\r\n104.106\t.2\r\n106.089\t.2\r\n109.0...
<class 'bytes'>
[ 57.  52.  46. ...,  10.  13.  10.]
<class 'numpy.ndarray'>

>>> print(sample_xy_np.shape)
(5653,)

如何从中获取2D(x,y)numpy数组?

感谢您的任何想法。

1 个答案:

答案 0 :(得分:0)

问题是BLOB的解码,必须将其转换为字符串,然后转换为数字数组。这可以通过以下方式完成:

spec_xy_np = np.fromstring(spec_xy_blob,  sep = '\t')
spec_xy_np = np.reshape(spec_xy_np, (-1, 2))

第一个命令生成数字1D数组。分隔符选项sep ='\ t'对于避免因空行而导致的错误非常重要。第二行将1D数组更改为2D(x,y)数组,而不需要条目数。