复制 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" 没有什么不可以的:)
之前也有人问过类似的问题,但问的方式不明确,而且使用了不同的代码。 我的问题:我想将 .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" 没有什么不可以的:)