阅读适合python中的文件

时间:2014-11-02 12:37:19

标签: python fits pyfits

我从fit文件中读取数据时遇到问题。通常我可以从fit文件中读取数据就好了,但现在我有一些数据文件给了我一些问题。 当我尝试读取应该包含三列和一个标题的文件时,我得到的是一个数字表,看起来像这样:

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

现在这是整数,数据文件确实应该包含三列,包含三列中的double和float,如下所示:

[9819.3801,0.00000,0.00000]

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

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

我知道我应该获取这些值,因为IDL中名为mrdfits的包可用于检索值。我已经尝试查看适合文件包含哪些数据类型以及哪些格式,我的代码如下所示:

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,它以不同的方式读取?有没有其他方法可以加载三列而不是我现在做的? 如果你需要我澄清一些问题,请问,因为我现在尝试了很多事情,我不确定采取哪个方向。 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分: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文件的标题和其他内容的信息。它不会打印列和信息。