2012-04-20 73 views
0

您好我有IDL(交互式數據語言)創造了一些二進制文件可以通過SciPy的讀取使用自動解決numpy的recarray

scipy.io.readsav 

特別是我用它作爲跟隨

data = scipy.io.readsav("input.sav", python_dict=True) 

所以輸出是一個標準的Python字典。尤其是輸出我可以訪問被存儲在字典中

du = data.keys() 
duV = data[du[0]] 

所以DUV現在是一個recarray的numpy.recarray。我不知道存儲在recarray中的變量和名稱。我可以訪問的變量的名稱作爲

names = duV.dtype.names 

現在假設名字等於

('V', 'T', 'THETA', 'ERR') 

我想找到一個自動程序讀取所有與相應的名稱,即一些變量自動做的

v = duV.field('V') 
t = duV.field('T') 

等。等。所以,我想創建被命名爲recarray

+0

你爲什麼不只是訪問他們作爲duV.field('V')'? – Avaris 2012-04-20 09:00:06

+0

因爲我不知道該字段的名稱,所以我想定義一個獨立於名稱名稱來解析重新數組的函數。我希望我解釋我自己 – 2012-04-20 09:27:37

+0

但是你必須在'duV.dtype.names'的名字,所以你知道他們說:'duV.field(duV.dtype.names [0])' – Avaris 2012-04-20 09:44:29

回答

1

如果你想要把所有的領域中的全局變量的名稱變量,你可以這樣做:

for name in duV.dtype.names: 
    globals()[name.lower()] = duV.field(name) 
+0

謝謝你解決了我的問題。也許正如Avaris指出的那樣,這不是一個好的編程習慣(從更一般的角度來看),但是對於我的目的來說,這是我所需要的。 – 2012-04-20 13:44:48