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

2024-06-16 11:41:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试修改FITS文件的头。更具体地说,我想给它添加新的关键字。我使用FitsIO for python,版本为0.9.11。你知道吗

在一些数据处理过程中,我的程序创建新的FITS文件并更新其内容和头。我以前和Astropy一起工作,但现在已经没有选择了,所以我要回到FitsIO,这对我来说是一个很大的挑战。你知道吗

内容更新/覆盖相当简单,但是我在标题修改方面遇到了问题。为了隔离我的问题,并找到正确的过程(文档不是很有用),我创建了一个只测试如何编写头的小程序。你知道吗

作为输入数据,我使用包含以下内容的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)

结果:删除结束卡,损坏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))

结果:删除结束卡,损坏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'

无奈之下,我终于手动添加了“结束”卡,如下所示:

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

但是,然后,最后的卡片被填充了空格,我正在使用的其他库没有正确识别。你知道吗

那么,在如何添加/更新标题关键字,使用python FitsIO,并且在过程中不丢失“END”卡方面,您有什么后知后觉吗?你知道吗

谢谢!你知道吗


Tags: keydata过程defwithextensionfilewrite
1条回答
网友
1楼 · 发布于 2024-06-16 11:41:20

当您打开文件时,删除clobber选项,头版就可以工作了。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头中附加关键字,从磁盘中删除该文件。你知道吗

$ 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                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

这是一个非常奇怪的结果,但是fitsio在一个空文件上附加了END关键字,如果不是一个有效的FITS文件的话。你知道吗

相关问题 更多 >