0

我有一个包含二进制表的 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 库或模块来做我想做的事吗?

4

1 回答 1

0

pyfits 当前缺少表的行迭代器。如果数据列不需要从磁盘存储格式转换为其“物理”值,那么读取表会很快。但否则,如果您尝试阅读此类专栏,它目前会爆炸。由于表接口正在被重写,我不会过多地反对它,但与此同时,您可能想尝试 fitio 库,它是 CFITSIO 周围的 Python 包装器,并提供高效的基于行的表迭代。

于 2014-04-09T14:36:57.813 回答