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'>