文本(CSV、固定宽度、HTML和专业)#
的 read() 和 write() 方法可用于读写各种基于文本的表数据 supported formats. In addition to common formats like CSV 和 fixed-width ,统一界面还支持 specialized formats 像 LaTeX 表和AAS MRT 格式.
大部分格式由 astropy.io.ascii ,这是一个灵活而强大的界面,用于读写文本表。此外,该界面还提供了围绕中选择的I/O函数的包装器 pandas 库可提供额外的灵活性和性能。
备注
对于读取大型CSV文件, PyArrow CSV 阅读器是一个值得考虑的好选择,因为它的速度比其他阅读器快15倍。
支持的格式#
以字母分隔的字母表#
这些格式使用字符分隔符来分隔列。这最常见的是逗号(CSV)或空白字符,例如空白或制表符。
格式 |
写 |
后缀 |
描述 |
|---|---|---|---|
ASCII码 |
是的 |
大多数支持的格式的ASC表(使用猜测) |
|
ascii.basic |
是的 |
|
|
ascii.commented_header |
是的 |
|
|
ascii.csv |
是的 |
.csv文件 |
|
ascii.ecsv |
是的 |
.ecsv系统 |
|
ascii.no_header |
是的 |
|
|
ascii.rdb |
是的 |
.rdb文件 |
|
ascii.tab |
是的 |
|
|
ascii.tdat |
是的 |
.tdat |
|
pandas.csv |
是的 |
||
pyarrow.csv |
不 |
|
定宽双排轮#
这些格式使用固定宽度的列,其中每列的字符宽度都是固定的。这对于旨在供人类阅读的表格可能很有用。
格式 |
写 |
后缀 |
描述 |
|---|---|---|---|
ascii.fixed_width |
是的 |
|
|
ascii.fixed_width_no_header |
是的 |
|
|
ascii.fixed_width_two_line |
是的 |
|
|
pandas.fwf |
不 |
|
HTML和Python格式#
格式 |
写 |
后缀 |
描述 |
|---|---|---|---|
ascii.html |
是的 |
.html格式 |
|
jsviewer |
是的 |
JavaScript查看器格式(只写) |
|
pandas.html |
是的 |
||
pandas.json |
是的 |
特殊形式#
格式 |
写 |
后缀 |
描述 |
|---|---|---|---|
ascii.aastex |
是的 |
|
|
ascii.cds |
不 |
|
|
ascii.daophot |
不 |
|
|
ascii.ipac |
是的 |
|
|
ascii.latex |
是的 |
.tex公司 |
|
ascii.mrt |
是的 |
|
|
ascii.qdp |
是的 |
.qdp |
|
ascii.rst |
是的 |
.重新设置 |
|
ascii.sextractor |
不 |
|
astropy.io.ascii#
的 astropy.io.ascii 子包提供读写支持 many different formats ,包括AAS等天文特定格式 Machine-Readable Tables (MRT) .
我们 strongly recommend 使用统一接口通过 astropy.io.ascii 分包。这是通过在 format name 与 ascii. 前缀例如,要读取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
Pandas#
astropy Table supports the ability to read or write tables using some of the I/O methods 可在 pandas. 因此,该接口为以下函数/方法提供了方便的包装:
格式名称 |
数据描述 |
读者 |
writer |
|---|---|---|---|
|
|||
|
|||
|
|||
|
固定宽度 |
笔记 :
这受到中讨论的限制 天体表和数据框架 .
中没有固定宽度的写入程序 pandas.
读取HTML需要 BeautifulSoup4 和 html5lib 待安装。
在读或写表时,除了 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参数.仅由字符串值组成的列
True和False被解析为布尔数据。包含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 直接使用占星界面中不可用的自定义选项。