You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个astropy.table.Table保存到同一FITS文件的不同HDU中?

如何将多个Astropy Table保存到同一个FITS文件的不同HDU中

嘿,这个需求其实很容易实现,你只需要借助astropy.io.fits里的HDU管理工具,把每个Table转换成对应的二进制表HDU,再打包到同一个文件里就行。下面是具体的步骤和代码示例:

实现思路

FITS文件的核心是HDU(Header Data Unit),每个HDU可以存储不同的数据。我们需要:

  • 把每个Table对象转换成BinTableHDU(专门用于存储表格数据的二进制表HDU)
  • 给FITS文件添加一个主HDU(这是FITS的标准规范,虽非强制但建议遵循)
  • 将所有HDU整合到HDUList中,一次性写入文件

完整代码示例

from astropy.table import Table
import numpy as np
from astropy.io.fits import HDUList, BinTableHDU, PrimaryHDU

# 创建你原本的两个数据表
ta = Table()
ta["test1"] = np.arange(0, 100.)

tb = Table()
tb["test2"] = np.arange(0, 100.)

# 将每个Table转换为BinTableHDU,还可以给每个HDU命名,方便后续查找
hdu_table1 = BinTableHDU(ta, name="MY_FIRST_TABLE")
hdu_table2 = BinTableHDU(tb, name="MY_SECOND_TABLE")

# 创建主HDU,作为文件的第一个HDU
primary_hdu = PrimaryHDU()

# 把所有HDU组装成一个列表
combined_hdus = HDUList([primary_hdu, hdu_table1, hdu_table2])

# 写入文件,overwrite=True表示如果文件已存在则覆盖
combined_hdus.write('combined_tables.fits', overwrite=True)

验证是否成功

写完之后可以用下面的代码读取验证,确保每个表都在对应的HDU中:

from astropy.io.fits import open
from astropy.table import Table

with open('combined_tables.fits') as hdul:
    # 打印所有HDU的名称,查看文件结构
    print("所有HDU名称:", [hdu.name for hdu in hdul])
    # 读取第一个表
    table1 = Table.read(hdul["MY_FIRST_TABLE"])
    # 读取第二个表
    table2 = Table.read(hdul["MY_SECOND_TABLE"])
    
    # 打印前几行数据确认正确性
    print("\n第一个表前5行:")
    print(table1[:5])
    print("\n第二个表前5行:")
    print(table2[:5])

这样操作后,你的两个数据表就分别存储在同一个FITS文件的不同HDU里了,后续读取也非常方便。

内容的提问来源于stack exchange,提问作者Julia Roquette

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:02:05