1

我正在尝试更改 FITS 文件标头中关键字的值。很简单,代码如下:

import pyfits

hdulist = pyfits.open('test.fits') # open a FITS file
prihdr = hdulist[1].header

print prihdr['AREASCAL']

effarea = prihdr['AREASCAL']/5.
print effarea
prihdr['AREASCAL'] = effarea

print prihdr['AREASCAL']

我多次打印这些步骤以检查值是否正确。他们是。问题是,当我之后检查 FITS 文件时,标题中的关键字值没有改变。为什么会这样?

4

3 回答 3

1

您需要关闭文件或显式刷新它,以便将更改写回:

hdulist.close()

或者

hdulist.flush()
于 2013-11-15T08:58:07.993 回答
1

您正在以只读模式打开文件。这不会阻止您修改任何内存中的对象,但是关闭或刷新文件(如该问题的其他答案中所建议的)不会对文件进行任何更改。您需要以更新模式打开文件:

hdul = pyfits.open(filename, mode='update')

或者更好的是使用 with 语句:

with pyfits.open(filename, mode='update') as hdul:
    # Make changes to the file...
    # The changes will be saved and the underlying file object closed when exiting
    # the 'with' block
于 2013-11-18T18:56:50.520 回答
0

有趣的是,在astropy 教程github 中有一个教程。这是该教程的ipython notebook 查看器版本,它解释了这一切。

基本上,您注意到 python 实例不与磁盘实例交互。您必须保存一个新文件或明确覆盖旧文件。

于 2013-11-15T16:35:59.070 回答