我正在尝试通过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笔记本。
答案 0 :(得分:2)
我的问题是为什么“标题”命令不起作用?
我应该以某种方式定义它吗?
简而言之:它不是一个命令,你不需要定义它。它实际上是一个属性,因此您必须在hdulist
上查找。
hdulist
包含hdu
,每个hdu
包含data
和header
,因此要访问您使用的第一个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。