2010-11-29 77 views
3

當爲createTable()的調用使用模式定義的字典或類時,似乎PyTable列按字母順序排列。我的需要是建立一個特定的順序,然後使用numpy.genfromtxt()從文本中讀取和存儲我的數據。我的文本文件沒有像PyTable那樣按字母順序包含變量名稱。有沒有辦法按特定順序存儲PyTable列?

例如,假設文本文件被命名爲mydata.txt和組織如下:

時間(ROW1)BVAR(ROW1)DVAR(ROW1)AVAR(ROW1)CVAR(ROW1)

時間(2行)BVAR(2行)DVAR(2行)AVAR(2行)CVAR(2行) ...

時間(rowN)BVAR(rowN)DVAR(rowN)AVAR(rowN)CVAR(rowN)

所以,需要創建一個表,這些表與這些列 和t如果使用numpy.genfromtxt命令填充表格。

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

這是所希望的,因爲它代碼簡單,速度非常快。但是,PyTable列總是按字母順序排列,附加數據按照所需順序排序。我在這裏錯過了什麼基礎?有沒有辦法讓表列的順序遵循類定義順序而不是按字母順序排列?

回答

8

是的,您可以通過幾種不同的方式在表格中定義訂單。最簡單的方法是對每列使用pos參數。請參閱該文檔爲Col類:

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

對於你的榜樣,它看起來像:

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) 

希望這有助於

+0

鏈接被打破 - 現在的http:// pytables.github.io/usersguide/libref/declarative_classes.html#the-col-class-and-its-descendants – seeker 2013-04-18 22:55:45

相關問題