Reading and Writing Table Objects#
astropy
provides a unified interface for reading and writing data in
different formats. For many common cases this will streamline the process of
file I/O and reduce the need to learn the separate details of all of the I/O
packages within astropy
. For details and examples of using this interface
see the Unified File Read/Write Interface section.
Getting Started#
The Table
class includes two methods,
read()
and write()
, that
make it possible to read from and write to files. A number of formats are
automatically supported (see Built-In Table Readers/Writers) and new file
formats and extensions can be registered with the Table
class (see I/O Registry (astropy.io.registry)).
To use this interface, first import the Table
class,
then call the Table
read()
method with the name of the file and the file format, for instance
'ascii.daophot'
:
>>> from astropy.table import Table
>>> t = Table.read('photometry.dat', format='ascii.daophot')
It is possible to load tables directly from the Internet using URLs. For
example, download tables from VizieR catalogs
in CDS format ('ascii.cds'
):
>>> t = Table.read("ftp://cdsarc.u-strasbg.fr/pub/cats/VII/253/snrs.dat",
... readme="ftp://cdsarc.u-strasbg.fr/pub/cats/VII/253/ReadMe",
... format="ascii.cds")
Similarly, for writing, the format can be explicitly specified:
>>> import astropy.units as u
>>> t = Table({'object': ['Mrk 421', 'BL Lac'], 'G': [13.2, 13.8] * u.mag})
>>> t.write('target_table.tex', format='latex')
For certain file formats, the format can be automatically detected, for example from the filename extension:
>>> t = Table.read('target_table.tex')
As for the read()
method, the format may
be automatically identified in some cases.
Any additional arguments specified will depend on the format. For examples of
this see the section Built-In Table Readers/Writers. This section also
provides the full list of choices for the format
argument.
Supported Formats#
The Unified File Read/Write Interface has built-in support for the following data file formats:
Reading and Writing Column Objects#
Individual table columns do not have their own functions for reading and writing but it is easy to select just a single column (here “obstime”) from a table for writing:
>>> from astropy.time import Time
>>> tab = Table({'name': ['AB Aur', 'SU Aur'],
... 'obstime': Time(['2013-05-23T14:23:12', '2011-11-11T11:11:11'])})
>>> tab[['obstime']].write('obstime.fits')
Note the notation [['obstime']]
in the last line - indexing a table with a list of strings
gives us a new table with the columns given by the strings. Since the inner list has only
one element, the resulting table has only one column.
Then, we can read back that single-column table and extract the column from it:
>>> col = Table.read('obstime.fits').columns[0]
>>> type(col)
<class 'astropy.table.column.Column'>