2010-11-29 4 views
3

Il semble que les colonnes PyTable sont classées par ordre alphabétique lors de l'utilisation du dictionnaire ou de la classe pour la définition de schéma pour l'appel à createTable(). Mon besoin est d'établir un ordre spécifique, puis d'utiliser numpy.genfromtxt() pour lire et stocker mes données à partir du texte. Mon fichier texte n'a pas les noms de variables inclus par ordre alphabétique comme ils sont pour le PyTable.Existe-t-il un moyen de stocker des colonnes PyTable dans un ordre spécifique?

Par exemple, en supposant un fichier texte est nommé mydata.txt et est organisé comme suit:

temps (ligne1) bvar (ligne1) Dvar (ligne1) avar (ligne1) CVar (ligne1)

temps (row2) bvar (row2) Dvar (row2) avar (row2) cVar (row2) ...

temps (rOWN) bvar (rOWN) Dvar (rOWN) avar (rOWN) cVar (rOWN)

Donc, le désir est de créer une table qui est ordonnée avec ces colonnes et t alors utilisez la commande numpy.genfromtxt pour remplir la table.

# Column and Table definition with desired order 
class parmDev(tables.IsDescription): 
    time = tables.Float64Col() 
    bVar = tables.Float64Col() 
    dVar = tables.Float64Col() 
    aVar = tables.Float64Col() 
    cVar = tables.Float64Col() 

#... 

mytab = tables.createTable(group, tabName, paramDev) 

data = numpy.genfromtxt(mydata.txt) 
mytab.append(data) 

Ceci est souhaité car c'est un code simple et très rapide. Cependant, les colonnes PyTable sont toujours triées par ordre alphabétique et les données ajoutées sont triées en fonction de l'ordre souhaité. Est-ce que je manque quelque chose de basique ici? Y a-t-il un moyen de faire en sorte que l'ordre des colonnes de la table suive l'ordre de la définition de classe au lieu d'être alphabétique?

Répondre

8

Oui, vous pouvez définir une commande dans des tables de plusieurs manières différentes. Le plus simple est d'utiliser le paramètre pos pour chaque colonne. Voir la documentation de la classe Col:

http://pytables.github.io/usersguide/libref/declarative_classes.html#the-col-class-and-its-descendants

Pour exemple, il ressemblera:

class parmDev(tables.IsDescription): 
    time = tables.Float64Col(pos=0) 
    bVar = tables.Float64Col(pos=1) 
    dVar = tables.Float64Col(pos=2) 
    aVar = tables.Float64Col(pos=3) 
    cVar = tables.Float64Col(pos=4) 

Hope this helps

+0

lien est rompu - il est maintenant http: // pytables.github.io/usersguide/libref/declarative_classes.html#the-col-class-and-its-descendants – seeker

Questions connexes