复制 fits-file 数据 and/or header 到新的 fits-file

Copying fits-file data and/or header into a new fits-file

之前也有人问过类似的问题,但问的方式不明确,而且使用了不同的代码。 我的问题:我想将 .fits-file header 的精确副本复制到新文件中。 (我需要以某种方式处理适合的文件,即我更改数据,保持 header 相同并将结果保存在新文件中)。这是一个简短的示例代码,仅演示我使用的工具和我得出的差异:

data_old, header_old = fits.getdata("input_file.fits", header=True)
fits.writeto('output_file.fits', data_old, header_old, overwrite=True)

我现在希望文件是精确的副本(headers 和两者的数据相同)。但是如果我检查差异,例如这样 -

fits.printdiff("input_file.fits", "output_file.fits")

我看到这两个文件不是彼此的精确副本。报告说:

...
Files contain different numbers of HDUs:
 a: 3
 b: 2

Primary HDU:

   Headers contain differences:
     Headers have different number of cards:
      a: 54
      b: 4
...

Extension HDU 1:

   Headers contain differences:
     Keyword GCOUNT   has different comments:
...

为什么没有原样?如何精确复制 header(and/or 数据)?是否忘记了钥匙? copy-pasting a fits-file-header 是否有另一种简单的方法?

如果您只想更新现有文件中的数据数组,同时保留其余结构,您是否尝试过 update 函数?

唯一的问题是它似乎没有写入新文件而不是更新现有文件的选项(也许它应该有这个选项)。但是,您仍然可以通过先复制现有文件,然后更新副本来使用它。

或者,您可以使用面向对象 API 更直接地做事。类似于:

with fits.open(filename) as hdu_list:
    hdu = hdu_list[<name or index of the HDU to update>]
    hdu.data = <new ndarray>
    # or hdu.data[<some index>] = <some value> i.e. just directly modify the existing array
    hdu.writeto('updated.fits')  # to write just that HDU to a new file, or
    # hdu_list.writeto('updated.fits')  # to write all HDUs, including the updated one, to a new file

"pythonic" 没有什么不可以的:)