使用pyfits逐行读取FITS二进制表
我有一个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
pyfits 现在没有一个可以逐行读取表格的功能。如果数据列的格式不需要从存储格式转换成“实际”值,那么读取表格会很快。但如果需要转换,读取时就会出现问题。我建议你不要太纠结这个,因为表格的接口正在重写。不过在这段时间里,你可以试试 fitsio 这个库,它是一个 Python 的封装,可以高效地逐行读取表格。