使用pyfits一次读取一行FITS二进制表

时间:2014-04-08 23:32:47

标签: python fits pyfits

我有一个包含二进制表的60GB FITS文件。我想一次读取(并处理)该表一行/条目/行/块*。

(*我不确定正确的命名法)

我正在使用pyfits,我想做的只是简单地说:

import pyfits

hdulist = = pyfits.open("file.fits")
# the binary table has to be in the 2nd extension
# hence it is in hdulist[1]

n_entries = hdulist[1].header['NAXIS2']

for i in xrange(n_entries):
    entry = hdulist[1].data[i]  # I am confused what happens at this step

    # now do stuff with the values in entry
    # .....

变量entry的类型为<class 'pyfits.fitsrec.FITS_record'>,其长度等于二进制表中的列数。然而,似乎发生的事情是二进制表的整个被读入此行的内存:entry = hdulist[1].data[i]

我查看了pyfits文档,但是我找不到任何方法似乎从表条目的二进制表扩展中读取数据(或一次一小段条目)。我不想从表中选择某些条目,只需按顺序扫描它们。

我想我的问题是:

0)hdulist[1].data[i]步骤发生了什么?为什么一切都被读入内存? (有什么方法吗?)

1)我是否遗漏了某些东西,并且pyfits实际上可以做我想要的吗?

2)那里会有另一个python库吗? (即在FITS扩展中使用二进制表)

3)如果没有,我可以用不同的二进制(或其他压缩/非ascii)格式(不是FITS)重新写入数据,并找到其他一些python库或模块来做我想要的吗?

1 个答案:

答案 0 :(得分:0)

pyfits目前缺少表的行迭代器。如果数据列不需要从磁盘存储格式转换为其“物理”值,那么读表很快。但是,如果你试图阅读这样的专栏,它目前会爆炸。我不打算过多地重写表接口,但在此期间你可能想尝试一下基于CFITSIO的Python包装的fitsio库,并提供有效的基于行的表迭代。