我有一个包含二进制表的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库或模块来做我想要的吗?
答案 0 :(得分:0)
pyfits目前缺少表的行迭代器。如果数据列不需要从磁盘存储格式转换为其“物理”值,那么读表很快。但是,如果你试图阅读这样的专栏,它目前会爆炸。我不打算过多地重写表接口,但在此期间你可能想尝试一下基于CFITSIO的Python包装的fitsio库,并提供有效的基于行的表迭代。