以前曾问过类似的问题,但是以一种暧昧的方式询问并使用不同的代码。 我的问题:我想将.fits文件头的精确副本复制到一个新文件中。 (我需要处理一个拟合文件,我更改数据,保持标题相同并将结果保存在新文件中)。这是一个简短的示例代码,只展示了我使用的工具以及我得出的差异:
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?
答案 0 :(得分: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”:)