Pyfits 或 astropy.io.fits 将行添加到适合文件中的二进制 table
Pyfits or astropy.io.fits add row to binary table in fits file
如何使用 pyfits、astropy.io.fits 或其他一些 python 库向二进制文件 table 添加一行?
此文件用作日志,因此每秒将添加一行,最终文件的大小将达到千兆字节,因此读取所有文件并将其写回或将数据副本保留在内存中并每秒将其写入文件实际上是不可能的。使用 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' 添加一些新值,即向二进制 table.
添加一行
解决方案 这对于 cfitsio 库(方法 fits_insert_row(...))来说是一项微不足道的任务,所以我使用 python 模块,它基于在上面:https://github.com/esheldon/fitsio
这里是使用 fitsio 的解决方案。要创建新的拟合文件,可以执行以下操作:
import fitsio, numpy
from fitsio import FITS,FITSHDR
fits = FITS('test.fits','rw')
data = numpy.zeros(1, dtype=[('index','i4')])
data[0]['index'] = 1
fits.write(data)
fits.close()
追加一行:
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()
感谢您的帮助。
如何使用 pyfits、astropy.io.fits 或其他一些 python 库向二进制文件 table 添加一行?
此文件用作日志,因此每秒将添加一行,最终文件的大小将达到千兆字节,因此读取所有文件并将其写回或将数据副本保留在内存中并每秒将其写入文件实际上是不可能的。使用 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' 添加一些新值,即向二进制 table.
添加一行解决方案 这对于 cfitsio 库(方法 fits_insert_row(...))来说是一项微不足道的任务,所以我使用 python 模块,它基于在上面:https://github.com/esheldon/fitsio
这里是使用 fitsio 的解决方案。要创建新的拟合文件,可以执行以下操作:
import fitsio, numpy
from fitsio import FITS,FITSHDR
fits = FITS('test.fits','rw')
data = numpy.zeros(1, dtype=[('index','i4')])
data[0]['index'] = 1
fits.write(data)
fits.close()
追加一行:
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()
感谢您的帮助。