使用astropy打印FITS文件的标题:NameError:未定义名称“标题”

时间:2017-09-27 18:44:58

标签: python header astropy fits

我正在尝试通过http://docs.astropy.org/en/stable/io/fits/

学习通过astropy来使用FITS操作

我正在关注本网站上的指示。 他们是:

  

“要查看FITS文件中显示的整个标题(使用END卡和padding剥离),只需输入标题对象,或print(repr(header))

但是当我输入header时,我收到以下错误:

NameError: name 'header' is not defined

当我发出print(header)print(repr(header))命令时,我收到同样的错误。

我的问题是为什么“标题”命令不起作用?

我应该以某种方式定义它吗?

我的代码:

from astropy.io import fits
hdulist = fits.open('test1.fits')
hdulist.info()
header

我正在通过Canopy使用jupyter笔记本。

1 个答案:

答案 0 :(得分:2)

  

我的问题是为什么“标题”命令不起作用?

     

我应该以某种方式定义它吗?

简而言之:它不是一个命令,你不需要定义它。它实际上是一个属性,因此您必须在hdulist上查找。

hdulist包含hdu,每个hdu包含dataheader,因此要访问您使用的第一个hdu的标头:

print(repr(hdulist[0].header))

[0]是因为我想要第一个HDU(python使用从零开始的索引),而.header访问此HDU的header属性。

即使我说你不需要来定义它,但你可以定义一个名为header的变量:

header = hdulist[0].header   # define a variable named "header" storing the header of the first HDU
print(repr(header))  # now it's defined and you can print it.

hdulist.info()应显示有多少个HDU,因此您可以决定要打印或存储哪个HDU。

请注意,您应始终使用open作为上下文管理器,以便自动关闭文件(即使出现错误):

from astropy.io import fits

with fits.open('test1.fits') as hdulist:  # this is like the "hdulist = fits.open('test1.fits')"
     hdulist.info()
     for hdu in hdulist:
         print(repr(hdu.header))
# After leaving the "with" the file closes.

此示例还说明了如何使用for循环覆盖HDUList中的所有HDU。