ASCII表格 (astropy.io.ascii

介绍

astropy.io.ascii 提供通过内置的读写各种ASCII数据表格式的方法 扩展读取器类 . 重点是灵活性和使用方便性,尽管读者可以选择使用一个不太灵活的基于C的引擎进行读写以提高性能。

下面显示了一些可用的ASCII格式,而 Supported formats 包含完整列表。

力量 astropy.io.ascii 是对天文学特定格式(通常包含元数据)和特殊数据类型(如 SkyCoordTimeQuantity . 对于以通用格式(如CSV)读取或写入大型数据表,请使用 Table - Pandas interface 是一个值得考虑的选项。

注解

也可以(并鼓励)使用 astropy.io.ascii 通过 Data Tables 包裹。看到了吗 统一文件读写接口 了解更多详细信息。

入门

阅读表格

大多数常见的ASCII表都可以用 read() 功能。假设您有一个名为 sources.dat 内容如下:

obsid redshift  X      Y     object
3102  0.32      4167  4085   Q1250+568-A
877   0.22      4378  3892   "Source 82"

此表可与以下内容一起阅读:

>>> from astropy.io import ascii
>>> data = ascii.read("sources.dat")  
>>> print(data)                       
obsid redshift  X    Y      object
----- -------- ---- ---- -----------
 3102     0.32 4167 4085 Q1250+568-A
  877     0.22 4378 3892   Source 82

第一个论点 read() 函数可以是文件名、表的字符串表示形式或表行列表。返回值 (data 在这种情况下)是 Table 对象。

默认情况下, read() 会尽力的 guess the table format 通过尝试 supported formats .

警告

对于大文件,猜测文件格式通常很慢,因为读者尝试用每种允许的格式解析文件,直到一种格式成功为止。对于大文件,建议禁用猜测 guess=False .

如果猜测格式不起作用,比如对于格式异常的表,您可能需要给出 astropy.io.ascii 关于格式的其他提示。

实例

对于格式异常的表,请给出有关格式的其他提示:

>>> lines = ['objID                   & osrcid            & xsrcid       ',
...          '----------------------- & ----------------- & -------------',
...          '              277955213 & S000.7044P00.7513 & XS04861B6_005',
...          '              889974380 & S002.9051P14.7003 & XS03957B7_004']
>>> data = ascii.read(lines, data_start=2, delimiter='&')
>>> print(data)
  objID         osrcid          xsrcid
--------- ----------------- -------------
277955213 S000.7044P00.7513 XS04861B6_005
889974380 S002.9051P14.7003 XS03957B7_004

如果文件的格式已知(例如,它是固定宽度表或IPAC表),则为 format 中某个值的参数 supported formats . 例如::

>>> data = ascii.read(lines, format='fixed_width_two_line', delimiter='&')

对于CSV等更简单的格式, read() 将自动尝试使用Cython/C解析引擎进行读取,这比普通Python实现(如中所述)快得多 快速ASCII I/O ). 如果快速引擎失灵, read() 默认情况下将依赖于Python阅读器。争论 fast_reader 可以指定来控制此行为。例如,要禁用快速引擎:

>>> data = ascii.read(lines, format='csv', fast_reader=False)

要阅读非常大的表格,请参阅 分块阅读大表 或使用 pandas (见下文注释)。

注解

通过指定包含纯字符的Python表来支持读取 encoding 参数。快速C阅读器不支持unicode。对于包含unicode的大数据文件,建议使用 pandas 并转换为 Table 通过 Table - Pandas interface .

书写表格

这个 write() 函数提供了一种将数据表写入格式化ASCII表的方法。

实例

以下命令将表作为简单的空格分隔文件写入:

>>> import numpy as np
>>> from astropy.table import Table, Column, MaskedColumn
>>> x = np.array([1, 2, 3])
>>> y = x ** 2
>>> data = Table([x, y], names=['x', 'y'])
>>> ascii.write(data, 'values.dat', overwrite=True)

这个 values.dat 文件将包含:

x y
1 1
2 4
3 9

支持的大多数输入读取器格式 astropy.io.ascii 阅读也支持写作。这为写作的格式提供了很大的灵活性。下面的示例将数据作为LaTeX表写入,使用选项将输出发送到 sys.stdout 而不是文件:

>>> import sys
>>> ascii.write(data, sys.stdout, format='latex')
\begin{table}
\begin{tabular}{cc}
x & y \\
1 & 1 \\
2 & 4 \\
3 & 9 \\
\end{tabular}
\end{table}

还有一个用于编写简单格式的更快的Cython引擎,对于这些格式,默认情况下是启用的(请参见 快速ASCII I/O ). 要停用此引擎,请使用参数 fast_writer ::

>>> ascii.write(data, 'values.csv', format='csv', fast_writer=False)  

最后,可以在 ECSV格式 它允许保留表元数据,如列数据类型和单元。这样,一个数据表(包括一个带屏蔽项的表)可以存储并以ASCII形式读回,而不会丢失信息。

>>> t = Table(masked=True)
>>> t['x'] = MaskedColumn([1.0, 2.0], unit='m', dtype='float32')
>>> t['x'][1] = np.ma.masked
>>> t['y'] = MaskedColumn([False, True], dtype='bool')
>>> import io
>>> fh = io.StringIO()
>>> t.write(fh, format='ascii.ecsv')  
>>> table_string = fh.getvalue()      
>>> print(table_string)               
# %ECSV 0.9
# ---
# datatype:
# - {name: x, unit: m, datatype: float32}
# - {name: y, datatype: bool}
x y
1.0 False
"" True
>>> Table.read(table_string, format='ascii')  
<Table masked=True length=2>
   x      y
   m
float32  bool
------- -----
    1.0 False
     --  True

注解

对于大多数支持的格式,您可以编写一个屏蔽表,然后将其读回,而不会丢失有关屏蔽表项的信息。这是通过使用一个空白字符串条目来指示一个屏蔽(丢失)值来实现的。见 错误或缺少值 有关详细信息,请参阅。

支持的格式

支持的完整列表 format 下面给出了ASCII表的值和相应的格式类型。这个 Write 列指示哪些格式支持写入功能,并且 Fast 列指示哪些格式与用于读写的快速Cython/C引擎兼容。

格式

快的

描述

aastex

是的

AASTex :用于AAS期刊的AASTeX deluxetable

basic

是的

是的

Basic :带自定义分隔符的基本表

cds

Cds :CDS格式表

commented_header

是的

是的

CommentedHeader :注释行中的列名

csv

是的

是的

Csv :带有逗号分隔值的基本表

daophot

Daophot :IRAF DAOphot格式表

ecsv

是的

Ecsv :增强的CSV格式

fixed_width

是的

FixedWidth :固定宽度

fixed_width_no_header

是的

FixedWidthNoHeader :固定宽度,无标题

fixed_width_two_line

是的

FixedWidthTwoLine :具有第二条标题行的固定宽度

html

是的

HTML :HTML格式表

ipac

是的

Ipac :IPAC格式表

latex

是的

Latex : Latex 表

no_header

是的

是的

NoHeader :没有标题的基本表

rdb

是的

是的

Rdb :用类型定义标题行分隔的选项卡

rst

是的

RST :restructedText简单格式表

sextractor

SExtractor :SExtractor格式表

tab

是的

是的

Tab :带制表符分隔值的基本表

注意

建议使用ECSV

对于以完全复制表数据、类型和元数据(即,表将“往返”)的方式将表写入和读取到ASCII,我们强烈建议使用 ECSV格式 . 这将以简单的空格分隔格式( basic 格式),任何ASCII表读取器都可以解析,但也包括注释块中编码的元数据,该注释块允许完全重建原始列。这包括支持 混合柱 (如 SkyCoordTime遮罩柱 .

性能提示

默认情况下,当试图读取一个文件时,读取器会猜测其格式,这涉及到尝试使用许多不同的读取器来读取该文件。为了在处理大型表时获得更好的性能,建议显式指定格式和任何选项,并关闭猜测。

例子

如果您正在读取一个简单的CSV文件,其中包含一行标题和列名,请执行以下操作:

read('example.csv', format='basic', delimiter=',', guess=False)  # doctest: +SKIP

至少可以比以下速度快一个数量级:

read('example.csv')  # doctest: +SKIP

参考/API

astropy.io.ascii包裹

一个可扩展的ASCII表读写器。

功能

convert_numpy \(numpy\u类型)

返回一个元组,该元组包含将列表转换为numpy数组的函数,以及由转换函数生成的类型。

get_read_trace ()

返回上次调用的尝试读取格式的回溯 read 其中启用了猜测。

get_reader \ [Reader, Inputter, Outputter] )

初始化一个表读取器,允许进行常见的自定义。

get_writer \ [Writer, fast_writer] )

初始化表编写器以允许进行常见的自定义。

read [表] [, guess] )

读取输入 table 把桌子还给我。

set_guess \(猜猜)

设置的默认值 guess read()的参数

write [表] [, output, format, Writer, ...] )

写入输入 tablefilename .

Classes

AASTex *  * 克瓦格斯)

AASTeX格式表。

AllType ()

所有其他数据类型的子类。

BaseData ()

基表数据读取器。

BaseHeader ()

基表头读取器

BaseInputter ()

从表输入中获取行并返回行列表。

BaseOutputter ()

以列名称键控的列对象的dict形式输出表。

BaseReader ()

类提供方法,以使用指定的头、数据、输入程序和输出器实例读取和写入ASCII表。

BaseSplitter ()

基本拆分器,它使用python的split方法来完成工作。

Basic ()

以字符分隔的表,顶部有一个标题行。

BasicData ()

基本表数据读取器

BasicHeader ()

基本表头读取器

Cds \ [readme] )

CDS格式表。

Column (姓名)

表列。

CommentedHeader ()

以字符分隔的表,列名称位于注释行中。

ContinuationLinesInputter ()

输入行结束于 continuation_char 与后续行连接。例子::。

Csv ()

CSV(逗号分隔值)表。

Daophot ()

DAOphot格式表。

DefaultSplitter ()

使用PythonCSV将字符串拆分为列的默认类。

Ecsv ()

ECSV(增强字符分隔值)格式表。

FastBasic \ [default_kwargs] )

该类用于处理普通 Basic writer,但它充当底层C代码的包装器,因此速度更快。

FastCommentedHeader *  * 克瓦格斯)

更快速的版本 CommentedHeader reader,它在注释行中查找列名。

FastCsv *  * 克瓦格斯)

普通版的更快版本 Csv 使用优化的C解析引擎的编写器。

FastNoHeader *  * 克瓦格斯)

这个类使用fastcengine读取没有标题行的表。

FastRdb *  * 克瓦格斯)

更快速的版本 Rdb 读者。

FastTab *  * 克瓦格斯)

普通版的更快版本 Tab 使用优化的C解析引擎的读取器。

FixedWidth \ [col_starts, col_ends, ...] )

固定宽度表格,具有定义列名和位置的单标题行。

FixedWidthData ()

基表数据读取器。

FixedWidthHeader ()

固定宽度的表头读取器。

FixedWidthNoHeader \ [col_starts, col_ends, ...] )

没有标题行的固定宽度表格。

FixedWidthSplitter ()

基于固定起始位置和结束位置的分割线 col 在里面 self.cols .

FixedWidthTwoLine \ [position_line, ...] )

具有两个标题行的固定宽度表格。

FloatType ()

描述浮点数据。

HTML \ [htmldict] )

HTML格式表格。

InconsistentTableError 

指示输入表在某种程度上不一致。

IntType ()

描述整数数据。

Ipac \ [definition, DBMS] )

IPAC格式表。

Latex \ [ignore_latex_commands, latexdict, ...] )

Latex 格式表。

NoHeader ()

没有标题行的字符分隔表。

NoType ()

超类 StrTypeNumType 类。

NumType ()

指示列由数值数据组成。

ParameterError 

指示读取器无法处理传递的参数。

QDP \([table_id, names, err_specs, sep] )

快速漂亮的绘图表。

RST ()

reStructuredText简单格式表。

Rdb ()

以制表符分隔的文件,在列定义行后添加一行,指定数字(N)或字符串数据。

SExtractor ()

SExtractor格式表。

StrType ()

指示列由文本数据组成。

Tab ()

制表符分隔的表。

TableOutputter ()

将表输出为astropy.table.table对象。

WhitespaceSplitter ()

类继承图

Inheritance diagram of astropy.io.ascii.latex.AASTex, astropy.io.ascii.core.AllType, astropy.io.ascii.core.BaseData, astropy.io.ascii.core.BaseHeader, astropy.io.ascii.core.BaseInputter, astropy.io.ascii.core.BaseOutputter, astropy.io.ascii.core.BaseReader, astropy.io.ascii.core.BaseSplitter, astropy.io.ascii.basic.Basic, astropy.io.ascii.basic.BasicData, astropy.io.ascii.basic.BasicHeader, astropy.io.ascii.cds.Cds, astropy.io.ascii.core.Column, astropy.io.ascii.basic.CommentedHeader, astropy.io.ascii.core.ContinuationLinesInputter, astropy.io.ascii.basic.Csv, astropy.io.ascii.daophot.Daophot, astropy.io.ascii.core.DefaultSplitter, astropy.io.ascii.ecsv.Ecsv, astropy.io.ascii.fastbasic.FastBasic, astropy.io.ascii.fastbasic.FastCommentedHeader, astropy.io.ascii.fastbasic.FastCsv, astropy.io.ascii.fastbasic.FastNoHeader, astropy.io.ascii.fastbasic.FastRdb, astropy.io.ascii.fastbasic.FastTab, astropy.io.ascii.fixedwidth.FixedWidth, astropy.io.ascii.fixedwidth.FixedWidthData, astropy.io.ascii.fixedwidth.FixedWidthHeader, astropy.io.ascii.fixedwidth.FixedWidthNoHeader, astropy.io.ascii.fixedwidth.FixedWidthSplitter, astropy.io.ascii.fixedwidth.FixedWidthTwoLine, astropy.io.ascii.core.FloatType, astropy.io.ascii.html.HTML, astropy.io.ascii.core.InconsistentTableError, astropy.io.ascii.core.IntType, astropy.io.ascii.ipac.Ipac, astropy.io.ascii.latex.Latex, astropy.io.ascii.basic.NoHeader, astropy.io.ascii.core.NoType, astropy.io.ascii.core.NumType, astropy.io.ascii.core.ParameterError, astropy.io.ascii.qdp.QDP, astropy.io.ascii.rst.RST, astropy.io.ascii.basic.Rdb, astropy.io.ascii.sextractor.SExtractor, astropy.io.ascii.core.StrType, astropy.io.ascii.basic.Tab, astropy.io.ascii.core.TableOutputter, astropy.io.ascii.core.WhitespaceSplitter