2017-10-03 5 views
0

J'ai stocké (x, y) des données dans une base de données sqlite3, où elles apparaissent comme 'BLOB'. Par exemple. la première blob a une taille de 5653.de sqlite3 BLOB (données x, y) à un tableau numpy?

Pour lire cette première blob-je utiliser:

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() 

Les sorties d'impression regardent les suivantes:

>>> 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,) 

Comment puis-je obtenir une 2D (x , y) tableau numpy hors de cela?

Merci pour votre idée.

Répondre

0

Le problème était le décodage du BLOB, qui doit être converti en une chaîne, puis en un tableau numérique. Cela peut être fait par:

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

La première commande génère un tableau numérique 1D. L'option séparateur sep = '\ t' est importante pour éviter les erreurs dues aux lignes vides. La deuxième ligne modifie le tableau 1D en un tableau 2D (x, y), sans avoir besoin du nombre d'entrées.