Python创建含多表头FITS文件时PrimaryHDU与表头编译异常求助
解决Python创建FITS文件时的PrimaryHDU冲突问题
我来帮你搞定这个问题!你遇到错误的核心原因是:一个FITS文件的HDU列表(HDUList)里只能存在一个PrimaryHDU,但你的代码里同时创建了两个PrimaryHDU实例(hdu和primary_hdu),这违反了FITS文件的规范。
下面给你两种可行的解决思路:
思路1:将数据与自定义表头合并到同一个PrimaryHDU
这是最常用的方式,直接把数据和你定义的表头绑定到同一个PrimaryHDU中,不需要分开创建两个Primary实例:
import numpy as np from astropy.io import fits # 创建数据数组 a = np.ones([5,5]) # 定义自定义表头 hdr = fits.Header() hdr['NPIX1'] = 60 hdr['NPIX2'] = 60 hdr['CRPIX1'] = 0 hdr['CRPIX2'] = 0 # 把数据和表头合并为一个PrimaryHDU primary_hdu = fits.PrimaryHDU(data=a, header=hdr) # 创建HDU列表并写入文件(加上overwrite=True可以覆盖已存在的文件) hdul = fits.HDUList([primary_hdu]) hdul.writeto('table4.fits', overwrite=True)
思路2:用ImageHDU存储额外数据(保留独立的PrimaryHDU)
如果你确实需要保留一个不带数据的PrimaryHDU,同时附加数据块,那么第二个HDU必须使用非Primary类型(比如ImageHDU),示例代码如下:
import numpy as np from astropy.io import fits a = np.ones([5,5]) hdr = fits.Header() hdr['NPIX1'] = 60 hdr['NPIX2'] = 60 hdr['CRPIX1'] = 0 hdr['CRPIX2'] = 0 # 创建带自定义表头的PrimaryHDU(无数据) primary_hdu = fits.PrimaryHDU(header=hdr) # 用ImageHDU存储你的数据 image_hdu = fits.ImageHDU(data=a) # 组合HDU列表,注意PrimaryHDU必须放在第一个位置 hdul = fits.HDUList([primary_hdu, image_hdu]) hdul.writeto('table4.fits', overwrite=True)
两种方案都能解决你的错误,你可以根据实际需求选择:如果只是想给数据加自定义元数据,选思路1;如果需要多数据块的结构,选思路2。
内容的提问来源于stack exchange,提问作者user8188120
相关产品推荐
相关产品推荐

