我正在尝试修改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”卡方面,您有什么后知后觉吗?你知道吗
谢谢!你知道吗
当您打开文件时,删除
clobber
选项,头版就可以工作了。clobber
选项用于在打开任何现有文件之前删除该文件,请参见docstring和code实现。你知道吗就我而言,这就像是Python3中fitsio 0.9.11的魅力:
另一方面,如果使用
clobber
选项,则在现有文件上使用相同的代码在给定的HDU头中附加关键字,从磁盘中删除该文件。你知道吗这是一个非常奇怪的结果,但是fitsio在一个空文件上附加了
END
关键字,如果不是一个有效的FITS文件的话。你知道吗相关问题 更多 >
编程相关推荐