2014-11-02 81 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