[ PROMPT_NODE_26226 ]
fits
[ SKILL_DOCUMENTATION ]
# FITS 文件处理 (astropy.io.fits)
`astropy.io.fits` 模块提供了用于读取、写入和操作 FITS(灵活图像传输系统)文件的全面工具。
## 打开 FITS 文件
### 基本文件打开方式
python
from astropy.io import fits
# 打开文件 (返回 HDUList - HDU 列表)
hdul = fits.open('filename.fits')
# 完成后务必关闭
hdul.close()
# 推荐:使用上下文管理器 (自动关闭)
with fits.open('filename.fits') as hdul:
hdul.info() # 显示文件结构
data = hdul[0].data
### 文件打开模式
python
fits.open('file.fits', mode='readonly') # 只读 (默认)
fits.open('file.fits', mode='update') # 读写
fits.open('file.fits', mode='append') # 向文件添加 HDU
### 内存映射
对于大文件,使用内存映射(默认行为):
python
hdul = fits.open('large_file.fits', memmap=True)
# 仅在需要时加载数据块
### 远程文件
访问云端托管的 FITS 文件:
python
uri = "s3://bucket-name/image.fits"
with fits.open(uri, use_fsspec=True, fsspec_kwargs={"anon": True}) as hdul:
# 使用 .section 获取切片,无需下载整个文件
cutout = hdul[1].section[100:200, 100:200]
## HDU 结构
FITS 文件包含头数据单元 (HDU):
- **主 HDU** (`hdul[0]`): 第一个 HDU,始终存在
- **扩展 HDU** (`hdul[1:]`): 图像或表格扩展
python
hdul.info() # 显示所有 HDU
# 输出:
# No. Name Ver Type Cards Dimensions Format
# 0 PRIMARY 1 PrimaryHDU 220 ()
# 1 SCI 1 ImageHDU 140 (1014, 1014) float32
# 2 ERR 1 ImageHDU 51 (1014, 1014) float32
## 访问 HDU
python
# 通过索引
primary = hdul[0]
extension1 = hdul[1]
# 通过名称
sci = hdul['SCI']
# 通过名称和版本号
sci2 = hdul['SCI', 2] # 第二个 SCI 扩展
## 处理头信息 (Headers)
### 读取头信息值
python
hdu = hdul[0]
header = hdu.header
# 获取关键字值 (不区分大小写)
observer = header['OBSERVER']
exptime = header['EXPTIME']
# 如果缺失则获取默认值
filter_name = header.get('FILTER', 'Unknown')
# 通过索引访问
value = header[7] # 第 8 张卡片的值
### 修改头信息
python
# 更新现有关键字
header['OBSERVER'] = 'Edwin Hubble'
# 添加/更新并附带注释
header['OBSERVER'] = ('Edwin Hubble', '观测者姓名')
# 在特定位置插入关键字
header.insert(5, ('NEWKEY', 'value', "