gpt4 book ai didi

python - 如何使用 FitsIO 更新 FITS 文件头?

转载 作者:行者123 更新时间:2023-12-01 08:00:42 29 4
gpt4 key购买 nike

我当前正在尝试修改 FITS 文件的 header 。更具体地说,我想为其添加新的关键字。我使用 Python 版的 FitsIO,版本为 0.9.11。

在一些数据处理过程中,我的程序创建新的 FITS 文件并更新其内容和标题。我曾经使用 Astropy,但这不再是一个选择,所以我又回到了 FitsIO,这对我来说是一个很大的挑战。

内容更新/覆盖相当简单,但我在 header 修改方面遇到了麻烦。为了隔离我的问题并找到正确的过程(文档不是很有帮助),我创建了一个小程序,仅测试如何编写 header 。

作为输入数据,我使用包含以下内容的 FITSHDR 对象:

update_data = fitsio.FITSHDR([
"IVAL = 36 / integer value ",
"SHORTS = 'hello w' ",
"DBL = 1.25 ",
"CDELT1 = 0.00333333333333 "])

以下是测试过的功能:

def write_hdu_1(data, fits_file):
with fitsio.FITS(fits_file, 'rw', clobber=True) as fits:
fits[extension].write_keys(data)

结果:删除 END 卡,损坏 HDU。

def write_hdu_2(data, fits_file):
with fitsio.FITS(fits_file, 'rw', clobber=True) as fits:
for key in data.keys():
fits[extension].write_key(key, data.get(key))

结果:删除 END 卡,损坏 HDU。

def write_hdu_3(fits_file):
with fitsio.FITS(fits_file, 'rw', clobber=True) as fits:
keydict = { 'name':'test', 'value':35, 'comment':'keydict test'}
fits[-1].write_key(**keydict)

结果:

File "test_fitsio.py", line 26, in write_hdu_3
fits[-1].write_key(**keydict)
TypeError: write_key() got an unexpected keyword argument 'name'

无奈之下,我最终手动添加了“END”卡,如下所示:

def write_hdu(self, header_content):
self.fits[extension].write_keys(header_content)
self.fits[extension].write_key('END', '')

但是,END 卡随后填充了空格,我正在使用的其他库无法正确识别这些空格。

那么,对于如何使用 python FitsIO 添加/更新标题关键字,并且在此过程中不丢失“END”卡,您有什么后见之明吗?

谢谢!

最佳答案

打开文件时删除clobber选项, header 版本将起作用。 clobber 选项用于在打开任何现有文件之前将其删除,请参阅 docstringcode实现。

就我而言,这就像 Python3 中的 Fitsio 0.9.11 的魅力:

with fitsio.FITS('test.fits', 'rw') as ff:
ff[-1].write_key('KEY', 'key value', 'my comment')

另一方面,如果您使用 clobber 选项,则在现有文件上使用相同的代码在给定 HDU header 中附加关键字会从磁盘中删除该文件。

$ du -sh test.fits                                                                                           
308K test.fits
$ python3 -c "import fitsio; ff = fitsio.FITS('test.fits', 'rw', clobber=True); ff[-1].write_key('KEY', 'key value', 'my comment')"
$ du -sh test.fits
4.0K test.fits
$ cat test.fits
KEY = 'key value' / my comment END

这是一个安静的奇怪结果,但适合附加 END 关键字,但在一个空文件上,如果不是有效的 FITS 文件。

关于python - 如何使用 FitsIO 更新 FITS 文件头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55748412/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com