0

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

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

我现在希望这些文件是精确的副本(两者的标题和数据相同)。但是,如果我检查差异,例如以这种方式 -

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:
...

为什么没有准确的副本?如何制作标题(和/或数据)的精确副本?钥匙忘记了吗?是否有另一种简单的方法来复制粘贴 fit-file-header?

4

1 回答 1

1

如果您只想更新现有文件中的数据数组,同时保留结构的其余部分,您是否尝试过该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”的:)

于 2018-04-28T16:12:53.233 回答