文本(CSV、固定宽度、HTML和专业)#

read()write() 方法可用于读写各种基于文本的表数据 supported formats. In addition to common formats like CSVfixed-width ,统一界面还支持 specialized formatsLaTeX 表和AAS MRT 格式.

大部分格式由 astropy.io.ascii ,这是一个灵活而强大的界面,用于读写文本表。此外,该界面还提供了围绕中选择的I/O函数的包装器 pandas 库可提供额外的灵活性和性能。

备注

对于读取大型CSV文件, PyArrow CSV 阅读器是一个值得考虑的好选择,因为它的速度比其他阅读器快15倍。

支持的格式#

以字母分隔的字母表#

这些格式使用字符分隔符来分隔列。这最常见的是逗号(CSV)或空白字符,例如空白或制表符。

格式

后缀

描述

ASCII码

是的

大多数支持的格式的ASC表(使用猜测)

ascii.basic

是的

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

ascii.commented_header

是的

CommentedHeader :注释行中的列名

ascii.csv

是的

.csv文件

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

ascii.ecsv

是的

.ecsv系统

Ecsv :具有增强CSV的基本表(支持元数据)

ascii.no_header

是的

NoHeader :没有标题的基本表

ascii.rdb

是的

.rdb文件

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

ascii.tab

是的

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

ascii.tdat

是的

.tdat

Tdat :可移植数据库聚合表格式

pandas.csv

是的

pandas.read_csv()pandas.DataFrame.to_csv()

pyarrow.csv

read_csv() :高性能CSV阅读器

定宽双排轮#

这些格式使用固定宽度的列,其中每列的字符宽度都是固定的。这对于旨在供人类阅读的表格可能很有用。

格式

后缀

描述

ascii.fixed_width

是的

FixedWidth :固定宽度

ascii.fixed_width_no_header

是的

FixedWidthNoHeader :固定宽度,无标题

ascii.fixed_width_two_line

是的

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

pandas.fwf

pandas.read_fwf() (固定宽度格式)

HTML和Python格式#

格式

后缀

描述

ascii.html

是的

.html格式

HTML :HTML表格

jsviewer

是的

JavaScript查看器格式(只写)

pandas.html

是的

pandas.read_html()pandas.DataFrame.to_html()

pandas.json

是的

pandas.read_json()pandas.DataFrame.to_json()

特殊形式#

格式

后缀

描述

ascii.aastex

是的

AASTex :用于AAS期刊的AASTeX deluxetable

ascii.cds

Cds :CDS格式表

ascii.daophot

Daophot :IRAF DAOphot格式表

ascii.ipac

是的

Ipac :IPAC格式表

ascii.latex

是的

.tex公司

Latex : Latex 表

ascii.mrt

是的

Mrt :AAS机器可读表格格式

ascii.qdp

是的

.qdp

QDP :Quick和Dandy绘图仪文件

ascii.rst

是的

.重新设置

RST :restructedText简单格式表

ascii.sextractor

SExtractor :SExtractor格式表

astropy.io.ascii#

astropy.io.ascii 子包提供读写支持 many different formats ,包括AAS等天文特定格式 Machine-Readable Tables (MRT) .

我们 strongly recommend 使用统一接口通过 astropy.io.ascii 分包。这是通过在 format nameascii. 前缀例如,要读取DAOphot表,请用途:

>>> from astropy.table import Table
>>> t = Table.read('photometry.dat', format='ascii.daophot')

使用 format='ascii' 按顺序读取表格并通过以特定顺序连续尝试大多数可用格式来猜测表格格式。这可能会很慢,不建议用于大型表。

>>> t = Table.read('astropy/io/ascii/tests/t/latex1.tex', format='ascii')
>>> print(t)
cola colb colc
---- ---- ----
   a    1    2
   b    3    4

写表格时 format='ascii' 输出是一个基本的以空白分隔的文件,具有包含列名的单个标题行。

所有附加参数都传递给 astropy.io.ascii read()write() 功能。有关详细信息,请参阅 参数用于 read()参数用于 write() . 例如,更改列分隔符和 colc 列用途:

>>> t.write(sys.stdout, format='ascii', delimiter='|', formats={'colc': '%0.2f'})
cola|colb|colc
a|1|2.00
b|3|4.00

注意

建议使用ECSV

用于以完全再现表数据、类型和元数据的方式将表写入文本和读取表(即,桌子将“往返”),我们强烈建议使用 ECSV格式format="ascii.ecsv" .这会以大多数文本表阅读器都可以解析的空白或逗号分隔格式写入实际数据,但还包括在评论块中编码的元数据,允许完全重建原始列。这包括支持 混合柱 (such作为 SkyCoordTime )和 多维列 .

Pandas#

astropy Table supports the ability to read or write tables using some of the I/O methods 可在 pandas. 因此,该接口为以下函数/方法提供了方便的包装:

格式名称

数据描述

读者

writer

pandas.csv

CSV

read_csv()

to_csv()

pandas.json

JSON

read_json()

to_json()

pandas.html

HTML

read_html()

to_html()

pandas.fwf

固定宽度

read_fwf()

笔记

在读或写表时,除了 format 文件名被传递给pandas,例如:

>>> t.write('data.csv', format='pandas.csv', sep=' ', header=False)
>>> t2 = Table.read('data.csv', format='pandas.csv', sep=' ', names=['a', 'b', 'c'])

PyArrow CSV#

pyarrow 库提供了一个高性能的CSV阅读器,可以在Astropy中使用, Table.read(input_file, format="pyarrow.csv", ...) .这比 astropy.io.ascii 快速阅读器或默认阅读器 pandas.csv 读者对于仅具有数字数据类型的文件来说,性能最好,但即使对于具有混合数据类型的文件,性能仍然优于标准 astropy.io.ascii 快速CSV阅读器

这位读者使用 read_csv() 函数,该函数反过来使用 PyArrow CSV reader 并设置各种选项 pyarrow.csv.read_csv() 适当地。该接口的设计类似于 io.ascii read interface 如果可能的话,但也存在差异,最值得注意的是:

  • 输入只能是字符串文件名, pathlib.Path ,或类似二进制文件的对象。

  • 字符串数据字段和标题列名中的空白被保留。

  • 使用 dtypes 而不是 converters 指定列数据类型。

  • 使用 null_values 而不是 fill_values 指定空(缺失)值。

  • 没有 guess 参数并且不猜测表格格式(例如, delimiter ).

  • 没有 data_end 参数.

  • 没有 exclude_names 参数.

  • 仅由字符串值组成的列 TrueFalse 被解析为布尔数据。

  • 包含ISO 8601日期/时间字符串的列将被解析,如下所示:- 12:13:14.123456 : object[datetime.time] - 2025-01-01 : np.datetime64[D] - 2025-01-01T01:02:03 : np.datetime64[s] - 2025-01-01T01:02:03.123456 : np.datetime64[ns]

  • 时间戳解析行为可以使用 timestamp_parsers 参数.

直接使用PyArrow CSV阅读器#

astropy.io.misc.pyarrow.csv 模块还提供 convert_pa_table_to_astropy_table() 函数允许转换 pyarrow.Table to an astropy.table.Table. This allows using the PyArrow CSV reader 直接使用占星界面中不可用的自定义选项。