在获得hdul后,可以使用两个属性.header
.data
分别获得头文件和数据单元
>>>hdul=fits.open(fits_image_filename)
>>>hdul[0].header['DATE']
'01/04/99'
.header
可以获得对应HDU的头文件,而头文件中各个关键词条目可以被通过使用关键词的名称如'DATE'
进行索引。
当然也可以通过数字进行索引。不过不建议用数值,因为你不知道到底你要找的那个关键词条目在第几个。
修改对应的值也很简单,直接赋值即可,一般不需要,除非是你要制作FITS文件,否则不要随便修改FITS文件的内容。
关键词对应的解释也可以获得
>>> hdr = hdul[0].header
>>> hdr['targname'] = ('NGC121-a', 'the observation target')
>>> hdr['targname']
'NGC121-a'
>>> hdr.comments['targname']
'the observation target'
那么怎么知道里面有哪些关键词呢?可以直接输入
>>>hdr
SIMPLE = T / file does conform to FITS standard
BITPIX = 16 / number of bits per data pixel
NAXIS = 0 / number of data axes
...
或者输入
>>> list(hdr.keys())
['SIMPLE', 'BITPIX', 'NAXIS', ...]
如果HDU的数据是图像,那么.data
将会返回一个ndarray对象(numpy的n维数组)
使用上一个博客中的hdul
>>>data=hdul[1].data
获得了第二个HDU的数据单元,第一个HDU没有数据,你应该记得如果你看了上一个博客的话。
ndarray的操作很简单,按照正常的数组索引,取值都非常容易。
>>> data.shape
(40, 40)
>>> data.dtype.name
'int16'
>>> print(data[1, 4])
348
这种数据也比较常见,比如随时间变化各个物理量的变化就可以组成一个表格
用官网的例子作为示意,此时你应该确定它确实是表格类型的数据单元,可以从.info()
看出
可以注意到第二个HDU的类型是二进制表,一共47785967行,7列。
此时使用
>>>data[0]
返回第一行的数据
其实一般取出一列的数据较为有用,因为一列数据正好是一个物理量的变化情况。
data.field(0)
取出第一列数据
也可以使用关键词
data.field('c1')
那么怎么知道关键词是什么呢?
>>>cols=hdul[1].columns
>>>cols.info()
或者
>>>cols.names
把数据读到python的数据结构数组中就很好处理了,画图也很容易,不过就不在这篇博客的讨论范围了。