如何使用 FitsIO 更新 FITS 文件 header?
How to update a FITS file header using FitsIO?
我目前正在尝试修改 FITS 文件的 header。更具体地说,我想为其添加新的关键字。我与 FitsIO 一起工作 python,版本为 0.9.11.
在一些数据处理过程中,我的程序创建了新的 FITS 文件并更新了它们的内容和 header。我曾经使用 Astropy,但这不再是一种选择,所以我又回到了 FitsIO,这对我来说是一个很大的挑战。
内容 update/overwrite 相当简单,但我对 header 的修改有困难。为了隔离我的问题,并找到正确的过程(文档不是很有帮助),我创建了一个小程序,只测试如何编写 header.
作为输入数据,我使用包含以下内容的 FITSHDR object:
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 add/update header 关键字,并且在此过程中不丢失 "END" 卡,您有什么后见之明吗?
谢谢!
打开文件时删除 clobber
选项,header 版本将可用。 clobber
选项用于在打开文件之前删除任何现有文件,请参阅 docstring and the code 实现。
在我这边,这对 Python3 中的 fitsio 0.9.11 很有用:
with fitsio.FITS('test.fits', 'rw') as ff:
ff[-1].write_key('KEY', 'key value', 'my comment')
另一方面,在现有文件上使用相同的代码在给定的 HDU 中附加关键字 header 如果您使用 clobber
选项,则从磁盘中删除文件。
$ 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 文件。
我目前正在尝试修改 FITS 文件的 header。更具体地说,我想为其添加新的关键字。我与 FitsIO 一起工作 python,版本为 0.9.11.
在一些数据处理过程中,我的程序创建了新的 FITS 文件并更新了它们的内容和 header。我曾经使用 Astropy,但这不再是一种选择,所以我又回到了 FitsIO,这对我来说是一个很大的挑战。
内容 update/overwrite 相当简单,但我对 header 的修改有困难。为了隔离我的问题,并找到正确的过程(文档不是很有帮助),我创建了一个小程序,只测试如何编写 header.
作为输入数据,我使用包含以下内容的 FITSHDR object:
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 add/update header 关键字,并且在此过程中不丢失 "END" 卡,您有什么后见之明吗?
谢谢!
打开文件时删除 clobber
选项,header 版本将可用。 clobber
选项用于在打开文件之前删除任何现有文件,请参阅 docstring and the code 实现。
在我这边,这对 Python3 中的 fitsio 0.9.11 很有用:
with fitsio.FITS('test.fits', 'rw') as ff:
ff[-1].write_key('KEY', 'key value', 'my comment')
另一方面,在现有文件上使用相同的代码在给定的 HDU 中附加关键字 header 如果您使用 clobber
选项,则从磁盘中删除文件。
$ 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 文件。