首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FitsIO更新FITS文件头?

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

Stack Overflow用户
提问于 2019-04-18 14:40:29
回答 1查看 619关注 0票数 1

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

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

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

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

代码语言:javascript
复制
update_data = fitsio.FITSHDR([
"IVAL    =                   36 / integer value           ",
"SHORTS  = 'hello w'                                      ",
"DBL     =                 1.25                           ",
"CDELT1  =                 0.00333333333333               "])

下面是经过测试的功能:

代码语言:javascript
复制
def write_hdu_1(data, fits_file):
    with fitsio.FITS(fits_file, 'rw', clobber=True) as fits:
        fits[extension].write_keys(data)

结果:删除结束卡,破坏HDU。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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)

结果

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

出于绝望,我终于手动添加了“结束”卡,就像这样:

代码语言:javascript
复制
def write_hdu(self, header_content):
    self.fits[extension].write_keys(header_content)
    self.fits[extension].write_key('END', '')

但是,然后,结束卡用空格填充,我使用的其他库没有正确地识别这些空格。

那么,对于如何使用python FitsIO添加/更新头关键字,并且在此过程中不丢失“结束”卡,您有什么后知后觉吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-19 12:21:48

当您打开文件时,删除clobber选项,标题版本将工作。clobber选项用于在打开现有文件之前删除它,查看文档串代码实现。

就我而言,这对于Python3中的Fitsio0.9.11来说是一种魅力:

代码语言:javascript
复制
with fitsio.FITS('test.fits', 'rw') as ff:
    ff[-1].write_key('KEY', 'key value', 'my comment')

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

代码语言:javascript
复制
$ 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                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

这是一个quiete奇怪的结果,但是fitsio追加了END关键字,但是在一个空文件上,如果不是一个有效的FITS文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55748412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档