I/O注册表 (astropy.io.registry

注解

I/O注册表只允许那些想要定义自己的自定义读写器的用户直接使用。希望了解支持哪些内置格式的用户 Table 默认情况下应该看到 统一文件读写接口 . 当前没有为定义内置格式 NDData ,但这将在将来添加。

介绍

I/O注册表是一个子模块,用于定义可用于 TableNDData 类。

使用 astropy.io.registry

本节演示如何创建自定义读写器。读取器是作为一个函数编写的,它可以接受除 format (这是手动指定格式时需要的-请参见下文)并返回 TableNDData 类(或子类)。

实例

这里我们假设我们正在尝试为 Table 班级:

from astropy.table import Table

def my_table_reader(filename, some_option=1):
    # Read in the table by any means necessary
    return table  # should be an instance of Table

这样的函数可以注册到I/O注册表中:

from astropy.io import registry
registry.register_reader('my-table-format', Table, my_table_reader)

其中第一个参数是格式的名称,第二个参数是函数返回实例的类,第三个参数是读取器本身。

然后我们可以在一个表格中阅读:

d = Table.read('my_table_file.mtf', format='my-table-format')

实际上,最好有 read 方法自动标识此文件位于 my-table-format 格式,这样我们就可以构造一个函数来识别这些文件,在这里我们称之为 标识符 功能。

标识符函数应采用第一个参数,该参数是一个字符串,指示标识符是否从中调用 readwrite ,然后应通过接受任意数量的位置参数和关键字参数 *args**kwargs ,它们是传递给 read 方法。

在上面的例子中,我们可以编写一个只查看文件名的函数(但实际上,这个函数甚至可以查看文件的前几个字节)。identifier函数的唯一要求是,它返回一个布尔值,指示输入是否与预期的格式匹配。在我们的示例中,我们希望自动识别文件名以结尾的文件 .mtf 就像在 my-table-format 格式::

import os

def identify_mtf(origin, *args, **kwargs):
    return (isinstance(args[0], str) and
            os.path.splitext(args[0].lower())[1] == '.mtf')

注解

标识符函数应该为任意输入做好准备—特别是,第一个参数可能不是文件名或文件对象,因此不应假定是这种情况。

然后注册这个标识符函数,类似于reader函数:

registry.register_identifier('my-table-format', Table, identify_mtf)

注册此函数后,我们可以执行以下操作:

t = Table.read('catalog.mtf')

如果多个格式与当前输入匹配,则引发异常,如果没有与当前输入匹配的格式,则会引发异常。在这种情况下,格式应该用 format= 关键字参数。

也可以创建自定义编写器。为了使用上面的定制阅读器,我们可以编写一个自定义的writer::

def my_table_writer(table, filename, overwrite=False):
    ...  # Write the table out to a file

Writer函数应该使用一个dataset对象(或者 TableNDData 类或子类),以及任何数量的后续位置参数和关键字参数 format 不能使用关键字参数。

然后注册作者:

registry.register_writer('my-custom-format', Table, my_table_writer)

我们可以把表写到一个文件中:

t.write('catalog_new.mtf', format='my-table-format')

既然我们已经注册了identifier函数,我们还可以:

t.write('catalog_new.mtf')

参考/API

astropy.io.registry公司模块

功能

register_reader \(数据格式,数据类别,…)

注册一个读卡器函数。

register_writer \(数据格式,数据类别,…)

注册表编写器函数。

register_identifier \(数据格式,数据类别,…)

将标识符函数与特定数据类型相关联。

identify_format \(源,数据u类u必选,…)

遍历标识符以查看匹配的格式。

get_reader \(数据格式,数据类)

获取的阅读器 data_format .

get_writer \(数据格式,数据类)

获取的写入程序 data_format .

read \(cls, * ARGs [, format, cache] )

读入数据。

write \(数据, * ARGs [, format] )

写出数据。

get_formats \ [data_class, readwrite] )

以表的形式获取已注册I/O格式的列表。

delay_doc_updates \(cls)

Contextmanager在注册读写器时禁用文档更新。

Classes

IORegistryError 

注册表冲突的自定义错误。

UnifiedReadWriteMethod (FUNC)

用于在统一I/O中创建read()和write()方法的描述符类。

UnifiedReadWrite \(实例,cls,方法名称)

统一read()或write()方法中使用的辅助对象的基类。

类继承图

Inheritance diagram of astropy.io.registry.IORegistryError, astropy.io.registry.UnifiedReadWriteMethod, astropy.io.registry.UnifiedReadWrite