HDF5#
读/写自/到 HDF5 文件支持 format='hdf5' (this需要 h5py 待安装)。但 .hdf5 写入文件时会自动识别文件扩展名,读取(使用文件的前几个字节来识别格式)时会自动识别HDF5文件(即使使用不同的扩展名),因此在大多数情况下您不需要显式指定 format='hdf5' .
由于HDF5文件可以包含多个表,因此应该通过 path= 读写时的争论。
实例#
读一个名为 data 从名为 observations.hdf5 ,您可以:
>>> from astropy.table import QTable
>>> t = QTable.read('observations.hdf5', path='data')
要读取嵌套在HDF5文件中组中的表,可以执行以下操作:
>>> t = QTable.read('observations.hdf5', path='group/data')
要将表写入新文件,还应指定路径:
>>> t.write('new_file.hdf5', path='updated_data')
也可以使用 append=True ::
>>> t.write('observations.hdf5', path='updated_data', append=True)
与其他格式一样 overwrite=True 参数支持重写现有文件。要在包含多个数据集的HDF5文件中仅覆盖一个表,请使用 both 这个 overwrite=True 和 append=True 争论。
最后,在写入HDF5文件时 compression= 参数可用于确保数据在磁盘上被压缩:
>>> t.write('new_file.hdf5', path='updated_data', compression=True)
元数据和Mixin列#
astropy 表可以包含元数据,两者都在表中 meta 属性(这是任意键/值对的有序字典),以及列中,每个列都有属性 unit , format , description 和 meta .
默认情况下,当向HDF5写入表时,代码将尝试在表中存储每个键/值对 meta 作为表数据集的HDF5属性。如果 meta 不是可以存储为HDF5属性的对象。此外,如果正在存储的表列为上面列出的任何列属性定义了值,则这些元数据将 not 并发出警告。
serialize_meta#
要启用将所有表和列元数据存储到HDF5文件,请调用 write() 方法与 serialize_meta=True . 这将在一个单独的HDF5数据集中存储元数据,该数据集包含在同一个文件中,该文件名为 <path>.__table_column_meta__ . 在这里 path 参数是否在调用中提供 write() ::
>>> t.write('observations.hdf5', path='data', serialize_meta=True)
将表元数据存储为字符串的数据集,方法是在YAML中按照 ECSV header format 定义。因为大多数常见语言都有YAML解析器,所以如果在非Astery应用程序中读取HDF5,就可以很容易地访问和使用表元数据。
通过指定 serialize_meta=True 还可以存储到包含以下内容的HDF5表 混合柱 等 Time 或 SkyCoord 列.
备注
某些类型的元数据(例如,NumPy对象数组)不能使用YAML正确序列化。