Pyfits或astropy.io.fits在拟合文件中将行添加到二进制表

时间:2017-10-26 17:06:37

标签: python astropy fits pyfits

如何使用pyfits,astropy.io.fits或者其他一些python库在big fits文件中的二进制表中添加单行?

此文件用作日志,因此每隔一行将添加一行,最终文件大小将达到千兆字节,因此读取所有文件并将其写回或将数据副本保留在内存中并写入到每个秒的文件实际上是不可能的。到目前为止,使用pyfits或astropy.io.fits我只能读取内存中的所有内容添加新行然后将其写回。

实施例。我创建像这样的拟合文件:

import numpy, pyfits
data = numpy.array([1.0])
col = pyfits.Column(name='index', format='E', array=data)
cols = pyfits.ColDefs([col])
tbhdu = pyfits.BinTableHDU.from_columns(cols)
tbhdu.writeto('test.fits')

我想在列'index'中添加一些新值,即在二进制表中再添加一行。

1 个答案:

答案 0 :(得分:0)

解决方案这对于cfitsio库来说是一个简单的任务(方法fits_insert_row(...)),所以我使用基于它的python模块:https://github.com/esheldon/fitsio

这是使用fitio的解决方案。要创建新的拟合文件,可以执行以下操作:

fits = FITS('test.fits','rw')
#you can actually use the same already opened fits file, 
#to flush the changes you just need: fits.reopen()
 data = numpy.zeros(1, dtype=[('index','i4')])
 data[0]['index'] = 2
 fits[1].append(data)
 fits.close()

追加一行:

Cross Cutting Functions

感谢您的帮助。