2014-11-02 86 views
-1

從適合文件中讀取數據時遇到問題。通常我可以從適合的文件中讀取數據,但現在我有一些數據文件,這給我一些問題。 當我試圖讀取文件,其中應包含三列和一個標題,我得到的是一個數字表格:閱讀適合python文件

[[64 195 45 ...,0 0 0]]

現在,這是一個整數,而數據文件確實應該包括含有雙三列和三列這樣的花車:

[9819.3801,0.00000,0.00000]

[9820.0025,5.50764e-16,1.62396 e-16]

[820.6248,-3.75781e-17,1.51864e-16]

我知道我應該得到這些值,因爲可以使用名爲mrdfits的IDL中的包來檢索這些值。我試圖尋找到的數據類型的擬合文件包含和格式,我的代碼看起來是這樣的:

f=pyfits.open('filename') 

dat =f[1].data 

print f.info 

>> No. Name   Type  Cards Dimensions Format 

>> 0 PRIMARY  PrimaryHDU  4 ()   uint8 

>> 1 PRIMARY  PrimaryHDU  576 (156288, 1) uint8 

>> None 

print pyfits.getval('filename','xtension',1) 

>> BINTABLE 

print dat 

>> [[ 64 195 45 ..., 0 0 0]] 

我的問題是基本;有沒有另外一種方法可以讀取數據,這樣就可以得到三列非整數數據?我想知道是否因爲該文件是一個BINTABLE,它以不同於正常的方式讀取?還有另一種方法可以加載三列,而不是我現在做的? 如果你需要我澄清一些問題,請問,因爲我現在已經嘗試了很多東西,所以我不確定採取哪一個方向。 任何幫助將不勝感激!

+0

是的,這是真的!感謝編輯! :-) – Quasar 2014-11-02 14:16:26

回答

0

一旦你下載了PyFITS,你就準備好了!要使用PyFITS並從FITS文件獲取信息,這是一個使用三列的小例子。

import pyfits 

# Load the FITS file into the program 
hdulist = pyfits.open('Your FITS file name here') 

# Load table data as tbdata 
tbdata = hdulist[1].data 

fields = ['J','H','K'] #This contains your column names 
var = dict((f, tbdata.field(f)) for f in fields) #Creating a dictionary that contains 
               #variable names J,H,K 

#Now to call column J,H and K just use 
J = var['J'] 
H = var['H'] 
K = var['K'] 

現在上面的例子有三列,標題爲J,H,K。你現在可以分別說J,H,K給他們打電話。

你在做什麼在你的代碼是你打印f.info它只會給你的信息頭和你的FITS文件的其他東西。它不會打印列和信息。

+0

我編輯了原始問題。也許這將澄清我的問題,因爲通常我沒有任何麻煩,使用PyFits它只是這一組數據似乎很奇怪。但我不認爲數據文件已被破壞,但可能我正在讀這個數據類型錯誤的方式.. – Quasar 2014-11-02 14:41:36