0

我有一个 fit 文件,我想在 fit 文件中添加一个新标题。

我实际上添加了一个新的适合标题,但它没有保存它。如何保存和添加新的适合标题?

这里的代码:

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)

预先感谢

4

2 回答 2

1

open()默认情况下以只读模式打开 FITS 文件。如果你想修改文件,你需要用mode='update'. 此外,附加新标题可以在一行中完成(如文档Header.append所示:

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

或者,如果您已经以只读模式打开了 FITS 文件,则可以使用此处提到的 writeto 方法将修改后的文件写入文件。

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

于 2019-08-23T09:03:14.597 回答
1

我没有 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()此外,每次运行代码时, using都会附加相同的“新”卡。为了防止这种情况,我建议进行微调。它不仅会添加您想要的新卡,而且如果您多次运行代码,它还会更新同一张卡,避免卡倍数。

with fits.open('example.fits', mode='update') as hdul:
    hdr = hdul[0].header
    hdr['GAIN'] = (0.12, 'e-/ADU')
于 2020-10-09T16:58:56.350 回答