如何在 fits 文件中保存和添加新的 fits header

How to save and add new fits header in fits file

我有一个 fits 文件,我想添加一个新的 header 到 fits 文件。

我实际上已经添加了一个新的 fits header 但它没有保存它。如何保存和添加新的配合 header?

代码在这里:

from astropy.io import fits
hdul = fits.open('example.fits.gz')[0]

hdul.header.append('GAIN')
hdul.header['GAIN'] = 0.12
hdul.header.comments['GAIN']="e-/ADU"

print(hdul.header)

提前致谢

open() 默认以 read-only 模式打开 FITS 文件。如果您想就地修改文件,您需要使用 mode='update' 打开它。此外,附加新的 header 可以在一行中完成(如 Header.append 中所述,例如:

with open('example.fits', mode='update') as hdul:
    hdul[0].header.append(('GAIN', 0.12, 'e-/ADU'))

或者,如果您已经在 read-only 模式下打开了一个 FITS 文件,您可以使用提到的 writeto 方法将修改后的文件写入 new 文件here.

我在您的原始示例中注意到的一个警告是您正在打开一个 gzip 压缩的 FITS 文件。如果可以在 'update' 模式下修改,我实际上并不确定我的头脑,在这种情况下你肯定需要写入一个新文件。我相信它 确实 有效,所以尝试一下,但我忘记了它的测试效果如何。

我没有 50 点声望来评论@Iguananaut 的回答,所以我会在这里留下我的评论:确保它是 fits.open()。否则会报如下错误ValueError: invalid mode: 'update'.

使用@Iguananaut 的例子,应该是:

with fits.open('example.fits', mode='update') as hdul:
    hdul[0].header.append(('GAIN', 0.12, 'e-/ADU'))

此外,使用 append() 将在每次 运行 代码时附加相同的 'new' 卡片。为防止这种情况,我建议进行小幅调整。它不仅会添加您想要的新卡片,而且如果您多次 运行 代码,它还会更新同一张卡片,避免卡片倍数。

with fits.open('example.fits', mode='update') as hdul:
    hdr = hdul[0].header
    hdr['GAIN'] = (0.12, 'e-/ADU')