复制FITS文件HDU和数据
1 个回答
0
关于添加新列的事情,你有没有看过这份文档? 这是创建一个新表并添加新列的最简单方法。这需要创建一个新的二进制表HDU,因为它描述了不同的数据。
或者你有没有了解过Astropy的表接口?它支持读取和写入FITS表。可以查看这里。基本上,它的工作方式和前面提到的差不多,但它更努力地隐藏了一些细节。这个接口是PyFITS/astropy.io.fits接口逐渐被替代的,因为它实际上提供了一个更好的表接口。
在现有的FITS文件中添加一个新的HDU或者替换一个已有的HDU,其实就是打开那个文件,更新HDUList
数据结构(它的工作方式就像普通的Python列表),然后把更新后的HDUList
写入一个新文件。
一个完整的例子可能看起来像这样:
try:
from astropy.io import fits
except ImportError:
import pyfits as fits
with fits.open('path/to/file.fits') as hdul:
table_hdu = hdul[1] # If the table is the first extension HDU
new_column = fits.Column(name='NEWCOL', format='D', array=np.zeros(len(table_hdu.data)))
new_columns = fits.ColDefs([new_column])
new_table_hdu = fits.new_table(table_hdu.columns + new_columns)
# Replace the original table HDU with the new one
hdul[1] = new_table_hdu
hdul.writeto('path/to/new_file.fits')
大致上这样的代码应该可以工作。一旦新的表接口在Astropy中完全整合,这会更简单,但目前就是这样。没有必要做任何“手动”的操作。