ASCII表格 (astropy.io.ascii
)¶
介绍¶
astropy.io.ascii
提供通过内置的读写各种ASCII数据表格式的方法 扩展读取器类 . 重点是灵活性和使用方便性,尽管读者可以选择使用一个不太灵活的基于C的引擎进行读写以提高性能。
下面显示了一些可用的ASCII格式,而 Supported formats 包含完整列表。
Basic
:具有可自定义分隔符和标头配置的基本表Cds
: CDS format table (也是Vizier和ApJ机器可读表格)Daophot
:IRAF DAOphot包中的表FixedWidth
:具有固定宽度列的表(另请参见 固定宽度画廊 )HTML
:包含在<table>标记中的HTML格式表Latex
:数据值位于tabular
环境Rdb
:制表符分隔值,在列定义行后加一行
力量 astropy.io.ascii
是对天文学特定格式(通常包含元数据)和特殊数据类型(如 SkyCoord , Time 和 Quantity . 对于以通用格式(如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引擎兼容。
格式 |
写 |
快的 |
描述 |
---|---|---|---|
|
是的 |
|
|
|
是的 |
是的 |
|
|
|
||
|
是的 |
是的 |
|
|
是的 |
是的 |
|
|
|
||
|
是的 |
|
|
|
是的 |
|
|
|
是的 |
|
|
|
是的 |
|
|
|
是的 |
|
|
|
是的 |
|
|
|
是的 |
|
|
|
是的 |
是的 |
|
|
是的 |
是的 |
|
|
是的 |
|
|
|
|
||
|
是的 |
是的 |
|
使用 astropy.io.ascii
¶
使用细节 astropy.io.ascii
在以下章节中提供:
性能提示¶
默认情况下,当试图读取一个文件时,读取器会猜测其格式,这涉及到尝试使用许多不同的读取器来读取该文件。为了在处理大型表时获得更好的性能,建议显式指定格式和任何选项,并关闭猜测。
例子¶
如果您正在读取一个简单的CSV文件,其中包含一行标题和列名,请执行以下操作:
read('example.csv', format='basic', delimiter=',', guess=False) # doctest: +SKIP
至少可以比以下速度快一个数量级:
read('example.csv') # doctest: +SKIP
参考/API¶
astropy.io.ascii包裹¶
一个可扩展的ASCII表读写器。
功能¶
|
返回一个元组,该元组包含将列表转换为numpy数组的函数,以及由转换函数生成的类型。 |
返回上次调用的尝试读取格式的回溯 |
|
|
初始化一个表读取器,允许进行常见的自定义。 |
|
初始化表编写器以允许进行常见的自定义。 |
|
读取输入 |
|
设置的默认值 |
|
写入输入 |
Classes¶
|
AASTeX格式表。 |
|
所有其他数据类型的子类。 |
|
基表数据读取器。 |
|
基表头读取器 |
|
从表输入中获取行并返回行列表。 |
以列名称键控的列对象的dict形式输出表。 |
|
|
类提供方法,以使用指定的头、数据、输入程序和输出器实例读取和写入ASCII表。 |
|
基本拆分器,它使用python的split方法来完成工作。 |
|
以字符分隔的表,顶部有一个标题行。 |
|
基本表数据读取器 |
|
基本表头读取器 |
|
CDS格式表。 |
|
表列。 |
以字符分隔的表,列名称位于注释行中。 |
|
输入行结束于 |
|
|
CSV(逗号分隔值)表。 |
|
DAOphot格式表。 |
使用PythonCSV将字符串拆分为列的默认类。 |
|
|
ECSV(增强字符分隔值)格式表。 |
|
该类用于处理普通 |
|
更快速的版本 |
|
普通版的更快版本 |
|
这个类使用fastcengine读取没有标题行的表。 |
|
更快速的版本 |
|
普通版的更快版本 |
|
固定宽度表格,具有定义列名和位置的单标题行。 |
基表数据读取器。 |
|
固定宽度的表头读取器。 |
|
|
没有标题行的固定宽度表格。 |
基于固定起始位置和结束位置的分割线 |
|
|
具有两个标题行的固定宽度表格。 |
|
描述浮点数据。 |
|
HTML格式表格。 |
指示输入表在某种程度上不一致。 |
|
|
描述整数数据。 |
|
IPAC格式表。 |
|
Latex 格式表。 |
|
没有标题行的字符分隔表。 |
|
超类 |
|
指示列由数值数据组成。 |
指示读取器无法处理传递的参数。 |
|
|
reStructuredText简单格式表。 |
|
以制表符分隔的文件,在列定义行后添加一行,指定数字(N)或字符串数据。 |
|
SExtractor格式表。 |
|
指示列由文本数据组成。 |
|
制表符分隔的表。 |
将表输出为astropy.table.table对象。 |
|