<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>astropy.io.ascii.core — Astropy v0.2.4</title> <link rel="stylesheet" href="../../../../_static/bootstrap-astropy.css" type="text/css" /> <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../../../../', VERSION: '0.2.4', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../../../../_static/jquery.js"></script> <script type="text/javascript" src="../../../../_static/underscore.js"></script> <script type="text/javascript" src="../../../../_static/doctools.js"></script> <script type="text/javascript" src="../../../../_static/sidebar.js"></script> <link rel="shortcut icon" href="../../../../_static/astropy_logo.ico"/> <link rel="top" title="Astropy v0.2.4" href="../../../../index.html" /> <link rel="up" title="Module code" href="../../../index.html" /> </head> <body> <div class="topbar"> <a class="brand" title="Documentation Home" href="../../../../index.html"></a> <ul> <li><a class="homelink" title="AstroPy Homepage" href="http://www.astropy.org"></a></li> <li><a title="General Index" href="../../../../genindex.html">Index</a></li> <li><a title="Python Module Index" href="../../../../py-modindex.html">Modules</a></li> <li> <form action="../../../../search.html" method="get"> <input type="text" name="q" placeholder="Search" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </li> </ul> </div> <div class="related"> <h3>Navigation</h3> <ul> <li> <a href="../../../../index.html">Astropy v0.2.4</a> » </li> <li><a href="../../../index.html" accesskey="U">Module code</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <h1>Source code for astropy.io.ascii.core</h1><div class="highlight"><pre> <span class="c"># Licensed under a 3-clause BSD style license - see LICENSE.rst</span> <span class="sd">""" An extensible ASCII table reader and writer.</span> <span class="sd">core.py:</span> <span class="sd"> Core base classes and functions for reading and writing tables.</span> <span class="sd">:Copyright: Smithsonian Astrophysical Observatory (2010)</span> <span class="sd">:Author: Tom Aldcroft (aldcroft@head.cfa.harvard.edu)</span> <span class="sd">"""</span> <span class="c">##</span> <span class="c">## Redistribution and use in source and binary forms, with or without</span> <span class="c">## modification, are permitted provided that the following conditions are met:</span> <span class="c">## * Redistributions of source code must retain the above copyright</span> <span class="c">## notice, this list of conditions and the following disclaimer.</span> <span class="c">## * Redistributions in binary form must reproduce the above copyright</span> <span class="c">## notice, this list of conditions and the following disclaimer in the</span> <span class="c">## documentation and/or other materials provided with the distribution.</span> <span class="c">## * Neither the name of the Smithsonian Astrophysical Observatory nor the</span> <span class="c">## names of its contributors may be used to endorse or promote products</span> <span class="c">## derived from this software without specific prior written permission.</span> <span class="c">##</span> <span class="c">## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND</span> <span class="c">## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span> <span class="c">## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</span> <span class="c">## DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY</span> <span class="c">## DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES</span> <span class="c">## (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</span> <span class="c">## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND</span> <span class="c">## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span> <span class="c">## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span> <span class="c">## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="nn">re</span> <span class="kn">import</span> <span class="nn">csv</span> <span class="kn">import</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">contextmanager</span> <span class="kn">from</span> <span class="nn">...table</span> <span class="kn">import</span> <span class="n">Table</span> <span class="kn">from</span> <span class="nn">...utils.data</span> <span class="kn">import</span> <span class="n">get_readable_fileobj</span> <div class="viewcode-block" id="InconsistentTableError"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.InconsistentTableError.html#astropy.io.ascii.core.InconsistentTableError">[docs]</a><span class="k">class</span> <span class="nc">InconsistentTableError</span><span class="p">(</span><span class="ne">ValueError</span><span class="p">):</span> <span class="k">pass</span> <span class="c"># Python 3 compatibility tweaks. Should work back through 2.4.</span></div> <span class="k">try</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">cStringIO</span> <span class="kn">as</span> <span class="nn">io</span> <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">io</span> <span class="k">try</span><span class="p">:</span> <span class="nb">next</span> <span class="o">=</span> <span class="nb">next</span> <span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span> <span class="nb">next</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">next</span><span class="p">()</span> <span class="k">try</span><span class="p">:</span> <span class="n">izip</span> <span class="o">=</span> <span class="n">itertools</span><span class="o">.</span><span class="n">izip</span> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> <span class="n">izip</span> <span class="o">=</span> <span class="nb">zip</span> <span class="k">try</span><span class="p">:</span> <span class="nb">long</span> <span class="o">=</span> <span class="nb">long</span> <span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span> <span class="nb">long</span> <span class="o">=</span> <span class="nb">int</span> <span class="k">try</span><span class="p">:</span> <span class="nb">unicode</span> <span class="o">=</span> <span class="nb">unicode</span> <span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span> <span class="nb">unicode</span> <span class="o">=</span> <span class="nb">str</span> <span class="c"># Python 2.4 comptability: any() function is built-in only for 2.5 onward</span> <span class="k">try</span><span class="p">:</span> <span class="nb">any</span> <span class="o">=</span> <span class="nb">any</span> <span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span> <span class="k">def</span> <span class="nf">any</span><span class="p">(</span><span class="n">vals</span><span class="p">):</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">:</span> <span class="k">if</span> <span class="n">val</span><span class="p">:</span> <span class="k">return</span> <span class="bp">True</span> <span class="k">return</span> <span class="bp">False</span> <div class="viewcode-block" id="NoType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.NoType.html#astropy.io.ascii.core.NoType">[docs]</a><span class="k">class</span> <span class="nc">NoType</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="k">pass</span> </div> <div class="viewcode-block" id="StrType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.StrType.html#astropy.io.ascii.core.StrType">[docs]</a><span class="k">class</span> <span class="nc">StrType</span><span class="p">(</span><span class="n">NoType</span><span class="p">):</span> <span class="k">pass</span> </div> <div class="viewcode-block" id="NumType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.NumType.html#astropy.io.ascii.core.NumType">[docs]</a><span class="k">class</span> <span class="nc">NumType</span><span class="p">(</span><span class="n">NoType</span><span class="p">):</span> <span class="k">pass</span> </div> <div class="viewcode-block" id="FloatType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.FloatType.html#astropy.io.ascii.core.FloatType">[docs]</a><span class="k">class</span> <span class="nc">FloatType</span><span class="p">(</span><span class="n">NumType</span><span class="p">):</span> <span class="k">pass</span> </div> <div class="viewcode-block" id="IntType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.IntType.html#astropy.io.ascii.core.IntType">[docs]</a><span class="k">class</span> <span class="nc">IntType</span><span class="p">(</span><span class="n">NumType</span><span class="p">):</span> <span class="k">pass</span> </div> <div class="viewcode-block" id="AllType"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.AllType.html#astropy.io.ascii.core.AllType">[docs]</a><span class="k">class</span> <span class="nc">AllType</span><span class="p">(</span><span class="n">StrType</span><span class="p">,</span> <span class="n">FloatType</span><span class="p">,</span> <span class="n">IntType</span><span class="p">):</span> <span class="k">pass</span> </div> <div class="viewcode-block" id="Column"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.Column.html#astropy.io.ascii.core.Column">[docs]</a><span class="k">class</span> <span class="nc">Column</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""Table column.</span> <span class="sd"> The key attributes of a Column object are:</span> <span class="sd"> * **name** : column name</span> <span class="sd"> * **index** : column index (first column has index=0, second has index=1, etc)</span> <span class="sd"> * **type** : column type (NoType, StrType, NumType, FloatType, IntType)</span> <span class="sd"> * **str_vals** : list of column values as strings</span> <span class="sd"> * **data** : list of converted column values</span> <span class="sd"> """</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span> <span class="bp">self</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">index</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">NoType</span> <span class="bp">self</span><span class="o">.</span><span class="n">str_vals</span> <span class="o">=</span> <span class="p">[]</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span> <span class="o">=</span> <span class="p">{}</span> </div> <div class="viewcode-block" id="BaseInputter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseInputter.html#astropy.io.ascii.core.BaseInputter">[docs]</a><span class="k">class</span> <span class="nc">BaseInputter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Get the lines from the table input and return a list of lines. The input</span> <span class="sd"> table can be one of:</span> <span class="sd"> * File name</span> <span class="sd"> * String (newline separated) with all header and data lines (must have at least 2 lines)</span> <span class="sd"> * File-like object with read() method</span> <span class="sd"> * List of strings</span> <span class="sd"> """</span> <div class="viewcode-block" id="BaseInputter.get_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseInputter.html#astropy.io.ascii.core.BaseInputter.get_lines">[docs]</a> <span class="k">def</span> <span class="nf">get_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">):</span> <span class="sd">"""Get the lines from the ``table`` input.</span> <span class="sd"> :param table: table input</span> <span class="sd"> :returns: list of lines</span> <span class="sd"> """</span> <span class="k">try</span><span class="p">:</span> <span class="k">if</span> <span class="p">(</span><span class="nb">hasattr</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="s">'read'</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="s">'</span><span class="se">\n</span><span class="s">'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">table</span> <span class="ow">and</span> <span class="s">'</span><span class="se">\r</span><span class="s">'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">table</span> <span class="o">+</span> <span class="s">''</span><span class="p">)):</span> <span class="k">with</span> <span class="n">get_readable_fileobj</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="k">as</span> <span class="n">file_obj</span><span class="p">:</span> <span class="n">table</span> <span class="o">=</span> <span class="n">file_obj</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> <span class="n">lines</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="c"># See if table supports indexing, slicing, and iteration</span> <span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">1</span><span class="p">]</span> <span class="nb">iter</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="n">lines</span> <span class="o">=</span> <span class="n">table</span> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s">'Input "table" must be a string (filename or data) or an iterable'</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_lines</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> </div> <div class="viewcode-block" id="BaseInputter.process_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseInputter.html#astropy.io.ascii.core.BaseInputter.process_lines">[docs]</a> <span class="k">def</span> <span class="nf">process_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="sd">"""Process lines for subsequent use. In the default case do nothing.</span> <span class="sd"> This routine is not generally intended for removing comment lines or</span> <span class="sd"> stripping whitespace. These are done (if needed) in the header and</span> <span class="sd"> data line processing.</span> <span class="sd"> Override this method if something more has to be done to convert raw</span> <span class="sd"> input lines to the table rows. For example the</span> <span class="sd"> ContinuationLinesInputter derived class accounts for continuation</span> <span class="sd"> characters if a row is split into lines."""</span> <span class="k">return</span> <span class="n">lines</span> </div></div> <div class="viewcode-block" id="BaseSplitter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseSplitter.html#astropy.io.ascii.core.BaseSplitter">[docs]</a><span class="k">class</span> <span class="nc">BaseSplitter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""Base splitter that uses python's split method to do the work.</span> <span class="sd"> This does not handle quoted values. A key feature is the formulation of</span> <span class="sd"> __call__ as a generator that returns a list of the split line values at</span> <span class="sd"> each iteration.</span> <span class="sd"> There are two methods that are intended to be overridden, first</span> <span class="sd"> ``process_line()`` to do pre-processing on each input line before splitting</span> <span class="sd"> and ``process_val()`` to do post-processing on each split string value. By</span> <span class="sd"> default these apply the string ``strip()`` function. These can be set to</span> <span class="sd"> another function via the instance attribute or be disabled entirely, for</span> <span class="sd"> example::</span> <span class="sd"> reader.header.splitter.process_val = lambda x: x.lstrip()</span> <span class="sd"> reader.data.splitter.process_val = None</span> <span class="sd"> :param delimiter: one-character string used to separate fields</span> <span class="sd"> """</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="bp">None</span> <div class="viewcode-block" id="BaseSplitter.process_line"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseSplitter.html#astropy.io.ascii.core.BaseSplitter.process_line">[docs]</a> <span class="k">def</span> <span class="nf">process_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span> <span class="sd">"""Remove whitespace at the beginning or end of line. This is especially useful for</span> <span class="sd"> whitespace-delimited files to prevent spurious columns at the beginning or end."""</span> <span class="k">return</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> </div> <div class="viewcode-block" id="BaseSplitter.process_val"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseSplitter.html#astropy.io.ascii.core.BaseSplitter.process_val">[docs]</a> <span class="k">def</span> <span class="nf">process_val</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span> <span class="sd">"""Remove whitespace at the beginning or end of value."""</span> <span class="k">return</span> <span class="n">val</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> </div> <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_line</span><span class="p">:</span> <span class="n">lines</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">process_line</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span> <span class="n">vals</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">:</span> <span class="k">yield</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">]</span> <span class="k">else</span><span class="p">:</span> <span class="k">yield</span> <span class="n">vals</span> <div class="viewcode-block" id="BaseSplitter.join"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseSplitter.html#astropy.io.ascii.core.BaseSplitter.join">[docs]</a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">vals</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="s">' '</span> <span class="k">else</span><span class="p">:</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="k">return</span> <span class="n">delimiter</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">)</span> </div></div> <div class="viewcode-block" id="DefaultSplitter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.DefaultSplitter.html#astropy.io.ascii.core.DefaultSplitter">[docs]</a><span class="k">class</span> <span class="nc">DefaultSplitter</span><span class="p">(</span><span class="n">BaseSplitter</span><span class="p">):</span> <span class="sd">"""Default class to split strings into columns using python csv. The class</span> <span class="sd"> attributes are taken from the csv Dialect class.</span> <span class="sd"> Typical usage::</span> <span class="sd"> # lines = ..</span> <span class="sd"> splitter = ascii.DefaultSplitter()</span> <span class="sd"> for col_vals in splitter(lines):</span> <span class="sd"> for col_val in col_vals:</span> <span class="sd"> ...</span> <span class="sd"> :param delimiter: one-character string used to separate fields.</span> <span class="sd"> :param doublequote: control how instances of *quotechar* in a field are quoted</span> <span class="sd"> :param escapechar: character to remove special meaning from following character</span> <span class="sd"> :param quotechar: one-character stringto quote fields containing special characters</span> <span class="sd"> :param quoting: control when quotes are recognised by the reader</span> <span class="sd"> :param skipinitialspace: ignore whitespace immediately following the delimiter</span> <span class="sd"> """</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="s">' '</span> <span class="n">quotechar</span> <span class="o">=</span> <span class="s">'"'</span> <span class="n">doublequote</span> <span class="o">=</span> <span class="bp">True</span> <span class="n">escapechar</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">quoting</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">QUOTE_MINIMAL</span> <span class="n">skipinitialspace</span> <span class="o">=</span> <span class="bp">True</span> <div class="viewcode-block" id="DefaultSplitter.process_line"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.DefaultSplitter.html#astropy.io.ascii.core.DefaultSplitter.process_line">[docs]</a> <span class="k">def</span> <span class="nf">process_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span> <span class="sd">"""Remove whitespace at the beginning or end of line. This is especially useful for</span> <span class="sd"> whitespace-delimited files to prevent spurious columns at the beginning or end.</span> <span class="sd"> If splitting on whitespace then replace unquoted tabs with space first"""</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">==</span> <span class="s">'\s'</span><span class="p">:</span> <span class="n">line</span> <span class="o">=</span> <span class="n">_replace_tab_with_space</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">escapechar</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">quotechar</span><span class="p">)</span> <span class="k">return</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> </div> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer</span> <span class="o">=</span> <span class="bp">None</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer_out</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">StringIO</span><span class="p">()</span> <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="sd">"""Return an iterator over the table ``lines``, where each iterator output</span> <span class="sd"> is a list of the split line values.</span> <span class="sd"> :param lines: list of table lines</span> <span class="sd"> :returns: iterator</span> <span class="sd"> """</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_line</span><span class="p">:</span> <span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">process_line</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">]</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">==</span> <span class="s">'\s'</span><span class="p">:</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="s">' '</span> <span class="k">else</span><span class="p">:</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="n">csv_reader</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">reader</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="n">delimiter</span><span class="p">,</span> <span class="n">doublequote</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">doublequote</span><span class="p">,</span> <span class="n">escapechar</span> <span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">escapechar</span><span class="p">,</span> <span class="n">quotechar</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">quotechar</span><span class="p">,</span> <span class="n">quoting</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">quoting</span><span class="p">,</span> <span class="n">skipinitialspace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">skipinitialspace</span> <span class="p">)</span> <span class="k">for</span> <span class="n">vals</span> <span class="ow">in</span> <span class="n">csv_reader</span><span class="p">:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">:</span> <span class="k">yield</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">]</span> <span class="k">else</span><span class="p">:</span> <span class="k">yield</span> <span class="n">vals</span> <div class="viewcode-block" id="DefaultSplitter.join"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.DefaultSplitter.html#astropy.io.ascii.core.DefaultSplitter.join">[docs]</a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">vals</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="s">' '</span> <span class="k">else</span><span class="p">:</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">writer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">csv_writer_out</span><span class="p">,</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span><span class="p">,</span> <span class="n">doublequote</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">doublequote</span><span class="p">,</span> <span class="n">escapechar</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escapechar</span><span class="p">,</span> <span class="n">quotechar</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">quotechar</span><span class="p">,</span> <span class="n">quoting</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">quoting</span><span class="p">,</span> <span class="n">lineterminator</span> <span class="o">=</span> <span class="s">''</span><span class="p">,</span> <span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer_out</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer_out</span><span class="o">.</span><span class="n">truncate</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">:</span> <span class="n">vals</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">process_val</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">]</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer</span><span class="o">.</span><span class="n">writerow</span><span class="p">(</span><span class="n">vals</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">csv_writer_out</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span> </div></div> <span class="k">def</span> <span class="nf">_replace_tab_with_space</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="n">escapechar</span><span class="p">,</span> <span class="n">quotechar</span><span class="p">):</span> <span class="sd">"""Replace tab with space within ``line`` while respecting quoted substrings"""</span> <span class="n">newline</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">in_quote</span> <span class="o">=</span> <span class="bp">False</span> <span class="n">lastchar</span> <span class="o">=</span> <span class="s">'NONE'</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span> <span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="n">quotechar</span> <span class="ow">and</span> <span class="n">lastchar</span> <span class="o">!=</span> <span class="n">escapechar</span><span class="p">:</span> <span class="n">in_quote</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">in_quote</span> <span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s">'</span><span class="se">\t</span><span class="s">'</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">in_quote</span><span class="p">:</span> <span class="n">char</span> <span class="o">=</span> <span class="s">' '</span> <span class="n">lastchar</span> <span class="o">=</span> <span class="n">char</span> <span class="n">newline</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">return</span> <span class="s">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">newline</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_get_line_index</span><span class="p">(</span><span class="n">line_or_func</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="sd">"""Return the appropriate line index, depending on ``line_or_func`` which</span> <span class="sd"> can be either a function, a positive or negative int, or None.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">line_or_func</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span> <span class="k">return</span> <span class="n">line_or_func</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="k">elif</span> <span class="n">line_or_func</span><span class="p">:</span> <span class="k">if</span> <span class="n">line_or_func</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span> <span class="k">return</span> <span class="n">line_or_func</span> <span class="k">else</span><span class="p">:</span> <span class="n">n_lines</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">)</span> <span class="k">return</span> <span class="n">n_lines</span> <span class="o">+</span> <span class="n">line_or_func</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">line_or_func</span> <div class="viewcode-block" id="BaseHeader"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader">[docs]</a><span class="k">class</span> <span class="nc">BaseHeader</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""Base table header reader</span> <span class="sd"> :param auto_format: format string for auto-generating column names</span> <span class="sd"> :param start_line: None, int, or a function of ``lines`` that returns None or int</span> <span class="sd"> :param comment: regular expression for comment lines</span> <span class="sd"> :param splitter_class: Splitter class for splitting data lines into columns</span> <span class="sd"> :param names: list of names corresponding to each data column</span> <span class="sd"> :param include_names: list of names to include in output (default=None selects all names)</span> <span class="sd"> :param exclude_names: list of names to exlude from output (applied after ``include_names``)</span> <span class="sd"> """</span> <span class="n">auto_format</span> <span class="o">=</span> <span class="s">'col</span><span class="si">%d</span><span class="s">'</span> <span class="n">start_line</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">comment</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">splitter_class</span> <span class="o">=</span> <span class="n">DefaultSplitter</span> <span class="n">names</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">include_names</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">exclude_names</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">write_spacer_lines</span> <span class="o">=</span> <span class="p">[</span><span class="s">'ASCII_TABLE_WRITE_SPACER_LINE'</span><span class="p">]</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">splitter_class</span><span class="p">()</span> <span class="k">def</span> <span class="nf">_set_cols_from_names</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c"># Filter full list of non-null column names with the include/exclude lists</span> <span class="n">names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">names</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">include_names</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">names</span><span class="o">.</span><span class="n">intersection_update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">include_names</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exclude_names</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">names</span><span class="o">.</span><span class="n">difference_update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exclude_names</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span> <span class="o">=</span> <span class="p">[</span><span class="n">Column</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">names</span><span class="p">)</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">names</span><span class="p">]</span> <div class="viewcode-block" id="BaseHeader.get_cols"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.get_cols">[docs]</a> <span class="k">def</span> <span class="nf">get_cols</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="sd">"""Initialize the header Column objects from the table ``lines``.</span> <span class="sd"> Based on the previously set Header attributes find or create the column names.</span> <span class="sd"> Sets ``self.cols`` with the list of Columns. This list only includes the actual</span> <span class="sd"> requested columns after filtering by the include_names and exclude_names</span> <span class="sd"> attributes. See ``self.names`` for the full list.</span> <span class="sd"> :param lines: list of table lines</span> <span class="sd"> :returns: None</span> <span class="sd"> """</span> <span class="n">start_line</span> <span class="o">=</span> <span class="n">_get_line_index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start_line</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_lines</span><span class="p">(</span><span class="n">lines</span><span class="p">))</span> <span class="k">if</span> <span class="n">start_line</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="c"># No header line so auto-generate names from n_data_cols</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">names</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="c"># Get the data values from the first line of table data to determine n_data_cols</span> <span class="k">try</span><span class="p">:</span> <span class="n">first_data_vals</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">get_str_vals</span><span class="p">())</span> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span> <span class="k">raise</span> <span class="n">InconsistentTableError</span><span class="p">(</span><span class="s">'No data lines found so cannot autogenerate '</span> <span class="s">'column names'</span><span class="p">)</span> <span class="n">n_data_cols</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">first_data_vals</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">names</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">auto_format</span> <span class="o">%</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">n_data_cols</span><span class="o">+</span><span class="mi">1</span><span class="p">)]</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">names</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="c"># No column names supplied so read them from header line in table.</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">process_lines</span><span class="p">(</span><span class="n">lines</span><span class="p">)):</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">start_line</span><span class="p">:</span> <span class="k">break</span> <span class="k">else</span><span class="p">:</span> <span class="c"># No header line matching</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'No header line found in table'</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">names</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">splitter</span><span class="p">([</span><span class="n">line</span><span class="p">]))</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_cols_from_names</span><span class="p">()</span> </div> <div class="viewcode-block" id="BaseHeader.process_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.process_lines">[docs]</a> <span class="k">def</span> <span class="nf">process_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="sd">"""Generator to yield non-comment lines"""</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comment</span><span class="p">:</span> <span class="n">re_comment</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">comment</span><span class="p">)</span> <span class="c"># Yield non-comment lines</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span> <span class="k">if</span> <span class="n">line</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">comment</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">re_comment</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">)):</span> <span class="k">yield</span> <span class="n">line</span> </div> <div class="viewcode-block" id="BaseHeader.write"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_line</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">spacer_line</span> <span class="ow">in</span> <span class="n">izip</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start_line</span><span class="p">),</span> <span class="n">itertools</span><span class="o">.</span><span class="n">cycle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">write_spacer_lines</span><span class="p">)):</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">spacer_line</span><span class="p">)</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">]))</span> </div> <span class="nd">@property</span> <div class="viewcode-block" id="BaseHeader.colnames"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.colnames">[docs]</a> <span class="k">def</span> <span class="nf">colnames</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Return the column names of the table"""</span> <span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">)</span> </div> <span class="k">def</span> <span class="nf">_get_n_data_cols</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Return the number of expected data columns from data splitting.</span> <span class="sd"> This is either explicitly set (typically for fixedwidth splitters)</span> <span class="sd"> or set to self.names otherwise.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">'_n_data_cols'</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">_n_data_cols</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">names</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_n_data_cols</span> <span class="k">def</span> <span class="nf">_set_n_data_cols</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span> <span class="sd">"""Return the number of expected data columns from data splitting.</span> <span class="sd"> """</span> <span class="bp">self</span><span class="o">.</span><span class="n">_n_data_cols</span> <span class="o">=</span> <span class="n">val</span> <span class="n">n_data_cols</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">_get_n_data_cols</span><span class="p">,</span> <span class="n">_set_n_data_cols</span><span class="p">)</span> <div class="viewcode-block" id="BaseHeader.get_type_map_key"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.get_type_map_key">[docs]</a> <span class="k">def</span> <span class="nf">get_type_map_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">col</span><span class="p">):</span> <span class="k">return</span> <span class="n">col</span><span class="o">.</span><span class="n">raw_type</span> </div> <div class="viewcode-block" id="BaseHeader.get_col_type"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseHeader.html#astropy.io.ascii.core.BaseHeader.get_col_type">[docs]</a> <span class="k">def</span> <span class="nf">get_col_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">col</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="n">type_map_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_type_map_key</span><span class="p">(</span><span class="n">col</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">col_type_map</span><span class="p">[</span><span class="n">type_map_key</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'Unknown data type ""</span><span class="si">%s</span><span class="s">"" for column "</span><span class="si">%s</span><span class="s">"'</span> <span class="o">%</span> <span class="p">(</span> <span class="n">col</span><span class="o">.</span><span class="n">raw_type</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">))</span> </div></div> <div class="viewcode-block" id="BaseData"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData">[docs]</a><span class="k">class</span> <span class="nc">BaseData</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""Base table data reader.</span> <span class="sd"> :param start_line: None, int, or a function of ``lines`` that returns None or int</span> <span class="sd"> :param end_line: None, int, or a function of ``lines`` that returns None or int</span> <span class="sd"> :param comment: Regular expression for comment lines</span> <span class="sd"> :param splitter_class: Splitter class for splitting data lines into columns</span> <span class="sd"> """</span> <span class="n">start_line</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">end_line</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">comment</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">splitter_class</span> <span class="o">=</span> <span class="n">DefaultSplitter</span> <span class="n">write_spacer_lines</span> <span class="o">=</span> <span class="p">[</span><span class="s">'ASCII_TABLE_WRITE_SPACER_LINE'</span><span class="p">]</span> <span class="n">formats</span> <span class="o">=</span> <span class="p">{}</span> <span class="n">fill_values</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">fill_include_names</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">fill_exclude_names</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">splitter_class</span><span class="p">()</span> <div class="viewcode-block" id="BaseData.process_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData.process_lines">[docs]</a> <span class="k">def</span> <span class="nf">process_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="sd">"""Strip out comment lines and blank lines from list of ``lines``</span> <span class="sd"> :param lines: all lines in table</span> <span class="sd"> :returns: list of lines</span> <span class="sd"> """</span> <span class="n">nonblank_lines</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">lines</span> <span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">comment</span><span class="p">:</span> <span class="n">re_comment</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">comment</span><span class="p">)</span> <span class="k">return</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">nonblank_lines</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">re_comment</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">x</span><span class="p">)]</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">nonblank_lines</span><span class="p">]</span> </div> <div class="viewcode-block" id="BaseData.get_data_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData.get_data_lines">[docs]</a> <span class="k">def</span> <span class="nf">get_data_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="sd">"""Set the ``data_lines`` attribute to the lines slice comprising the</span> <span class="sd"> table data values."""</span> <span class="n">data_lines</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_lines</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="n">start_line</span> <span class="o">=</span> <span class="n">_get_line_index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start_line</span><span class="p">,</span> <span class="n">data_lines</span><span class="p">)</span> <span class="n">end_line</span> <span class="o">=</span> <span class="n">_get_line_index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">end_line</span><span class="p">,</span> <span class="n">data_lines</span><span class="p">)</span> <span class="k">if</span> <span class="n">start_line</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">end_line</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_lines</span> <span class="o">=</span> <span class="n">data_lines</span><span class="p">[</span><span class="nb">slice</span><span class="p">(</span><span class="n">start_line</span><span class="p">,</span> <span class="n">end_line</span><span class="p">)]</span> <span class="k">else</span><span class="p">:</span> <span class="c"># Don't copy entire data lines unless necessary</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_lines</span> <span class="o">=</span> <span class="n">data_lines</span> </div> <div class="viewcode-block" id="BaseData.get_str_vals"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData.get_str_vals">[docs]</a> <span class="k">def</span> <span class="nf">get_str_vals</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Return a generator that returns a list of column values (as strings)</span> <span class="sd"> for each data line."""</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">splitter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data_lines</span><span class="p">)</span> </div> <div class="viewcode-block" id="BaseData.masks"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData.masks">[docs]</a> <span class="k">def</span> <span class="nf">masks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span> <span class="sd">"""Set fill value for each column and then apply that fill value</span> <span class="sd"> In the first step it is evaluated with value from ``fill_values`` applies to</span> <span class="sd"> which column using ``fill_include_names`` and ``fill_exclude_names``.</span> <span class="sd"> In the second step all replacements are done for the appropriate columns.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_fill_values</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_masks</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> </div> <span class="k">def</span> <span class="nf">_set_fill_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span> <span class="sd">"""Set the fill values of the individual cols based on fill_values of BaseData</span> <span class="sd"> fill values has the following form:</span> <span class="sd"> <fill_spec> = (<bad_value>, <fill_value>, <optional col_name>...)</span> <span class="sd"> fill_values = <fill_spec> or list of <fill_spec>'s</span> <span class="sd"> """</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">:</span> <span class="c">#if input is only one <fill_spec>, then make it a list</span> <span class="k">try</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">''</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">]</span> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span> <span class="k">pass</span> <span class="c"># Step 1: Set the default list of columns which are affected by fill_values</span> <span class="n">colnames</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">colnames</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_include_names</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">colnames</span><span class="o">.</span><span class="n">intersection_update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fill_include_names</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_exclude_names</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">colnames</span><span class="o">.</span><span class="n">difference_update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fill_exclude_names</span><span class="p">)</span> <span class="c"># Step 2a: Find out which columns are affected by this tuple</span> <span class="c"># iterate over reversed order, so last condition is set first and</span> <span class="c"># overwritten by earlier conditions</span> <span class="k">for</span> <span class="n">replacement</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">):</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">replacement</span><span class="p">)</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"Format of fill_values must be "</span> <span class="s">"(<bad>, <fill>, <optional col1>, ...)"</span><span class="p">)</span> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">replacement</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="n">affect_cols</span> <span class="o">=</span> <span class="n">colnames</span> <span class="k">else</span><span class="p">:</span> <span class="n">affect_cols</span> <span class="o">=</span> <span class="n">replacement</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">((</span><span class="n">i</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">colnames</span><span class="p">)</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">affect_cols</span><span class="p">):</span> <span class="n">cols</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">fill_values</span><span class="p">[</span><span class="n">replacement</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">replacement</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">def</span> <span class="nf">_set_masks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span> <span class="sd">"""Replace string values in col.str_vals and set masks"""</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fill_values</span><span class="p">:</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="p">(</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">fill_values</span><span class="p">):</span> <span class="n">col</span><span class="o">.</span><span class="n">mask</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">str_vals</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">numpy</span><span class="o">.</span><span class="n">bool</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">str_val</span> <span class="ow">in</span> <span class="p">((</span><span class="n">i</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">str_vals</span><span class="p">)</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">col</span><span class="o">.</span><span class="n">fill_values</span><span class="p">):</span> <span class="n">col</span><span class="o">.</span><span class="n">str_vals</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">fill_values</span><span class="p">[</span><span class="n">str_val</span><span class="p">]</span> <span class="n">col</span><span class="o">.</span><span class="n">mask</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span> <div class="viewcode-block" id="BaseData.write"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseData.html#astropy.io.ascii.core.BaseData.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">start_line</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">'Start_line attribute cannot be callable for write()'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">data_start_line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_line</span> <span class="ow">or</span> <span class="mi">0</span> <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o"><</span> <span class="n">data_start_line</span><span class="p">:</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">cycle</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">write_spacer_lines</span><span class="p">))</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_col_formats</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">formats</span><span class="p">):</span> <span class="n">col_str_iters</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">iter_str_vals</span><span class="p">()</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">]</span> <span class="k">for</span> <span class="n">vals</span> <span class="ow">in</span> <span class="n">izip</span><span class="p">(</span><span class="o">*</span><span class="n">col_str_iters</span><span class="p">):</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">vals</span><span class="p">))</span> </div> <span class="nd">@contextmanager</span> <span class="k">def</span> <span class="nf">_set_col_formats</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">,</span> <span class="n">formats</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Context manager to save the internal column formats in `cols` and</span> <span class="sd"> override with any custom `formats`.</span> <span class="sd"> """</span> <span class="n">orig_formats</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">format</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">]</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">:</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">formats</span><span class="p">:</span> <span class="n">col</span><span class="o">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">formats</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="k">yield</span> <span class="c"># execute the nested context manager block</span> <span class="c"># Restore the original column format values</span> <span class="k">for</span> <span class="n">col</span><span class="p">,</span> <span class="n">orig_format</span> <span class="ow">in</span> <span class="n">izip</span><span class="p">(</span><span class="n">cols</span><span class="p">,</span> <span class="n">orig_formats</span><span class="p">):</span> <span class="n">col</span><span class="o">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">orig_format</span> </div> <span class="k">class</span> <span class="nc">DictLikeNumpy</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span> <span class="sd">"""Provide minimal compatibility with numpy rec array API for BaseOutputter</span> <span class="sd"> object::</span> <span class="sd"> table = ascii.read('mytable.dat', numpy=False)</span> <span class="sd"> table.field('x') # List of elements in column 'x'</span> <span class="sd"> table.dtype.names # get column names in order</span> <span class="sd"> table[1] # returns row 1 as a list</span> <span class="sd"> table[1][2] # 3nd column in row 1</span> <span class="sd"> table['col1'][1] # Row 1 in column col1</span> <span class="sd"> for row_vals in table: # iterate over table rows</span> <span class="sd"> print row_vals # print list of vals in each row</span> <span class="sd"> """</span> <span class="c"># To do: - add colnames property to set colnames and dtype.names as well.</span> <span class="c"># - ordered dict?</span> <span class="k">class</span> <span class="nc">Dtype</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="k">pass</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span> <span class="o">=</span> <span class="n">DictLikeNumpy</span><span class="o">.</span><span class="n">Dtype</span><span class="p">()</span> <span class="nb">dict</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="k">return</span> <span class="nb">dict</span><span class="o">.</span><span class="n">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span> <span class="o">+</span> <span class="s">''</span><span class="p">)</span> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span> <span class="k">return</span> <span class="p">[</span><span class="nb">dict</span><span class="o">.</span><span class="n">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">)[</span><span class="n">item</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="o">.</span><span class="n">names</span><span class="p">]</span> <span class="k">def</span> <span class="nf">field</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colname</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="n">colname</span><span class="p">]</span> <span class="k">def</span> <span class="nf">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">())[</span><span class="mi">0</span><span class="p">])</span> <span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">__index</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">return</span> <span class="bp">self</span> <span class="k">def</span> <span class="nf">__next__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="n">vals</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">__index</span><span class="p">]</span> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">StopIteration</span> <span class="k">else</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">__index</span> <span class="o">+=</span> <span class="mi">1</span> <span class="k">return</span> <span class="n">vals</span> <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><</span> <span class="mi">3</span><span class="p">:</span> <span class="c"># pragma: py2</span> <span class="nb">next</span> <span class="o">=</span> <span class="n">__next__</span> <div class="viewcode-block" id="convert_numpy"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.convert_numpy.html#astropy.io.ascii.core.convert_numpy">[docs]</a><span class="k">def</span> <span class="nf">convert_numpy</span><span class="p">(</span><span class="n">numpy_type</span><span class="p">):</span> <span class="sd">"""Return a tuple ``(converter_func, converter_type)``. The converter</span> <span class="sd"> function converts a list into a numpy array of the given ``numpy_type``.</span> <span class="sd"> This type must be a valid `numpy type</span> <span class="sd"> <http://docs.scipy.org/doc/numpy/user/basics.types.html>`_, e.g.</span> <span class="sd"> numpy.int, numpy.uint, numpy.int8, numpy.int64, numpy.float, numpy.float64,</span> <span class="sd"> numpy.str. The converter type is used to track the generic data type (int,</span> <span class="sd"> float, str) that is produced by the converter function.</span> <span class="sd"> """</span> <span class="c"># Infer converter type from an instance of numpy_type.</span> <span class="n">type_name</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">array</span><span class="p">([],</span> <span class="n">dtype</span><span class="o">=</span><span class="n">numpy_type</span><span class="p">)</span><span class="o">.</span><span class="n">dtype</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="s">'int'</span> <span class="ow">in</span> <span class="n">type_name</span><span class="p">:</span> <span class="n">converter_type</span> <span class="o">=</span> <span class="n">IntType</span> <span class="k">elif</span> <span class="s">'float'</span> <span class="ow">in</span> <span class="n">type_name</span><span class="p">:</span> <span class="n">converter_type</span> <span class="o">=</span> <span class="n">FloatType</span> <span class="k">elif</span> <span class="s">'str'</span> <span class="ow">in</span> <span class="n">type_name</span><span class="p">:</span> <span class="n">converter_type</span> <span class="o">=</span> <span class="n">StrType</span> <span class="k">else</span><span class="p">:</span> <span class="n">converter_type</span> <span class="o">=</span> <span class="n">AllType</span> <span class="k">def</span> <span class="nf">converter</span><span class="p">(</span><span class="n">vals</span><span class="p">):</span> <span class="k">return</span> <span class="n">numpy</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">vals</span><span class="p">,</span> <span class="n">numpy_type</span><span class="p">)</span> <span class="k">return</span> <span class="n">converter</span><span class="p">,</span> <span class="n">converter_type</span> </div> <div class="viewcode-block" id="BaseOutputter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseOutputter.html#astropy.io.ascii.core.BaseOutputter">[docs]</a><span class="k">class</span> <span class="nc">BaseOutputter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""Output table as a dict of column objects keyed on column name. The</span> <span class="sd"> table data are stored as plain python lists within the column objects.</span> <span class="sd"> """</span> <span class="n">converters</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># Derived classes must define default_converters and __call__</span> <span class="nd">@staticmethod</span> <span class="k">def</span> <span class="nf">_validate_and_copy</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">converters</span><span class="p">):</span> <span class="sd">"""Validate the format for the type converters and then copy those</span> <span class="sd"> which are valid converters for this column (i.e. converter type is</span> <span class="sd"> a subclass of col.type)"""</span> <span class="n">converters_out</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">try</span><span class="p">:</span> <span class="k">for</span> <span class="n">converter</span> <span class="ow">in</span> <span class="n">converters</span><span class="p">:</span> <span class="n">converter_func</span><span class="p">,</span> <span class="n">converter_type</span> <span class="o">=</span> <span class="n">converter</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">converter_type</span><span class="p">,</span> <span class="n">NoType</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">()</span> <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">converter_type</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">type</span><span class="p">):</span> <span class="n">converters_out</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">converter_func</span><span class="p">,</span> <span class="n">converter_type</span><span class="p">))</span> <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'Error: invalid format for converters, see documentation</span><span class="se">\n</span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">converters</span><span class="p">)</span> <span class="k">return</span> <span class="n">converters_out</span> <span class="k">def</span> <span class="nf">_convert_vals</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">:</span> <span class="n">converters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">converters</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_converters</span><span class="p">)</span> <span class="n">col</span><span class="o">.</span><span class="n">converters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_and_copy</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">converters</span><span class="p">)</span> <span class="k">while</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="s">'data'</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="n">converter_func</span><span class="p">,</span> <span class="n">converter_type</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">converters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">converter_type</span><span class="p">,</span> <span class="n">col</span><span class="o">.</span><span class="n">type</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">()</span> <span class="n">col</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">converter_func</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">str_vals</span><span class="p">)</span> <span class="n">col</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">converter_type</span> <span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">):</span> <span class="n">col</span><span class="o">.</span><span class="n">converters</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'Column </span><span class="si">%s</span><span class="s"> failed to convert'</span> <span class="o">%</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> </div> <div class="viewcode-block" id="TableOutputter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.TableOutputter.html#astropy.io.ascii.core.TableOutputter">[docs]</a><span class="k">class</span> <span class="nc">TableOutputter</span><span class="p">(</span><span class="n">BaseOutputter</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Output the table as an astropy.table.Table object.</span> <span class="sd"> """</span> <span class="n">default_converters</span> <span class="o">=</span> <span class="p">[</span><span class="n">convert_numpy</span><span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">int</span><span class="p">),</span> <span class="n">convert_numpy</span><span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">float</span><span class="p">),</span> <span class="n">convert_numpy</span><span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">str</span><span class="p">)]</span> <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_vals</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="c"># If there are any values that were filled and tagged with a mask bit then this</span> <span class="c"># will be a masked table. Otherwise use a plain table.</span> <span class="n">masked</span> <span class="o">=</span> <span class="nb">any</span><span class="p">(</span><span class="nb">hasattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="s">'mask'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">numpy</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">mask</span><span class="p">)</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">)</span> <span class="n">out</span> <span class="o">=</span> <span class="n">Table</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">data</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">],</span> <span class="n">names</span><span class="o">=</span><span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">],</span> <span class="n">masked</span><span class="o">=</span><span class="n">masked</span><span class="p">)</span> <span class="k">for</span> <span class="n">col</span><span class="p">,</span> <span class="n">out_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">cols</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">columns</span><span class="o">.</span><span class="n">values</span><span class="p">()):</span> <span class="k">if</span> <span class="n">masked</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="s">'mask'</span><span class="p">):</span> <span class="n">out_col</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">mask</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">mask</span> <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="p">(</span><span class="s">'format'</span><span class="p">,</span> <span class="s">'units'</span><span class="p">,</span> <span class="s">'description'</span><span class="p">):</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="nb">setattr</span><span class="p">(</span><span class="n">out_col</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">attr</span><span class="p">))</span> <span class="k">return</span> <span class="n">out</span> </div> <div class="viewcode-block" id="BaseReader"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseReader.html#astropy.io.ascii.core.BaseReader">[docs]</a><span class="k">class</span> <span class="nc">BaseReader</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""Class providing methods to read and write an ASCII table using the specified</span> <span class="sd"> header, data, inputter, and outputter instances.</span> <span class="sd"> Typical usage is to instantiate a Reader() object and customize the</span> <span class="sd"> ``header``, ``data``, ``inputter``, and ``outputter`` attributes. Each</span> <span class="sd"> of these is an object of the corresponding class.</span> <span class="sd"> There is one method ``inconsistent_handler`` that can be used to customize the</span> <span class="sd"> behavior of ``read()`` in the event that a data row doesn't match the header.</span> <span class="sd"> The default behavior is to raise an InconsistentTableError.</span> <span class="sd"> """</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">BaseHeader</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">BaseData</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">inputter</span> <span class="o">=</span> <span class="n">BaseInputter</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">outputter</span> <span class="o">=</span> <span class="n">TableOutputter</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">meta</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># Placeholder for storing table metadata</span> <span class="c"># Data and Header instances benefit from a little cross-coupling. Header may need to</span> <span class="c"># know about number of data columns for auto-column name generation and Data may</span> <span class="c"># need to know about header (e.g. for fixed-width tables where widths are spec'd in header.</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <div class="viewcode-block" id="BaseReader.read"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseReader.html#astropy.io.ascii.core.BaseReader.read">[docs]</a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">):</span> <span class="sd">"""Read the ``table`` and return the results in a format determined by</span> <span class="sd"> the ``outputter`` attribute.</span> <span class="sd"> The ``table`` parameter is any string or object that can be processed</span> <span class="sd"> by the instance ``inputter``. For the base Inputter class ``table`` can be</span> <span class="sd"> one of:</span> <span class="sd"> * File name</span> <span class="sd"> * String (newline separated) with all header and data lines (must have at least 2 lines)</span> <span class="sd"> * List of strings</span> <span class="sd"> :param table: table input</span> <span class="sd"> :returns: output table</span> <span class="sd"> """</span> <span class="c"># If ``table`` is a file then store the name in the ``data``</span> <span class="c"># attribute. The ``table`` is a "file" if it is a string</span> <span class="c"># without the new line specific to the OS.</span> <span class="k">try</span><span class="p">:</span> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">linesep</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">table</span> <span class="o">+</span> <span class="s">''</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">table_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span> <span class="c"># Not a string.</span> <span class="k">pass</span> <span class="c"># Same from __init__. ??? Do these need to be here?</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="bp">self</span><span class="o">.</span><span class="n">lines</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">inputter</span><span class="o">.</span><span class="n">get_lines</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">get_data_lines</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">get_cols</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">)</span> <span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">cols</span> <span class="c"># header.cols corresponds to *output* columns requested</span> <span class="n">n_data_cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">n_data_cols</span> <span class="c"># number of data cols expected from splitter</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">cols</span> <span class="o">=</span> <span class="n">cols</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">str_vals</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">get_str_vals</span><span class="p">()):</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">str_vals</span><span class="p">)</span> <span class="o">!=</span> <span class="n">n_data_cols</span><span class="p">:</span> <span class="n">str_vals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">inconsistent_handler</span><span class="p">(</span><span class="n">str_vals</span><span class="p">,</span> <span class="n">n_data_cols</span><span class="p">)</span> <span class="c">#if str_vals is None, we skip this row</span> <span class="k">if</span> <span class="n">str_vals</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">continue</span> <span class="c">#otherwise, we raise an error only if it is still inconsistent</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">str_vals</span><span class="p">)</span> <span class="o">!=</span> <span class="n">n_data_cols</span><span class="p">:</span> <span class="n">errmsg</span> <span class="o">=</span> <span class="p">(</span><span class="s">'Number of header columns (</span><span class="si">%d</span><span class="s">) inconsistent with '</span> <span class="s">'data columns (</span><span class="si">%d</span><span class="s">) at data line </span><span class="si">%d</span><span class="se">\n</span><span class="s">'</span> <span class="s">'Header values: </span><span class="si">%s</span><span class="se">\n</span><span class="s">'</span> <span class="s">'Data values: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">cols</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">str_vals</span><span class="p">),</span> <span class="n">i</span><span class="p">,</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">],</span> <span class="n">str_vals</span><span class="p">))</span> <span class="k">raise</span> <span class="n">InconsistentTableError</span><span class="p">(</span><span class="n">errmsg</span><span class="p">)</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">:</span> <span class="n">col</span><span class="o">.</span><span class="n">str_vals</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">str_vals</span><span class="p">[</span><span class="n">col</span><span class="o">.</span><span class="n">index</span><span class="p">])</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">masks</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">outputter</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">cols</span> <span class="k">return</span> <span class="n">table</span> </div> <div class="viewcode-block" id="BaseReader.inconsistent_handler"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseReader.html#astropy.io.ascii.core.BaseReader.inconsistent_handler">[docs]</a> <span class="k">def</span> <span class="nf">inconsistent_handler</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">str_vals</span><span class="p">,</span> <span class="n">ncols</span><span class="p">):</span> <span class="sd">"""Adjust or skip data entries if a row is inconsistent with the header.</span> <span class="sd"> The default implementation does no adjustment, and hence will always trigger</span> <span class="sd"> an exception in read() any time the number of data entries does not match</span> <span class="sd"> the header.</span> <span class="sd"> Note that this will *not* be called if the row already matches the header.</span> <span class="sd"> :param str_vals: A list of value strings from the current row of the table.</span> <span class="sd"> :param ncols: The expected number of entries from the table header.</span> <span class="sd"> :returns:</span> <span class="sd"> list of strings to be parsed into data entries in the output table. If</span> <span class="sd"> the length of this list does not match ``ncols``, an exception will be</span> <span class="sd"> raised in read(). Can also be None, in which case the row will be</span> <span class="sd"> skipped.</span> <span class="sd"> """</span> <span class="c">#an empty list will always trigger an InconsistentTableError in read()</span> <span class="k">return</span> <span class="n">str_vals</span> </div> <span class="nd">@property</span> <div class="viewcode-block" id="BaseReader.comment_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseReader.html#astropy.io.ascii.core.BaseReader.comment_lines">[docs]</a> <span class="k">def</span> <span class="nf">comment_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Return lines in the table that match header.comment regexp"""</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">'lines'</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'Table must be read prior to accessing the header_comment_lines'</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">comment</span><span class="p">:</span> <span class="n">re_comment</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">comment</span><span class="p">)</span> <span class="n">comment_lines</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lines</span> <span class="k">if</span> <span class="n">re_comment</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">x</span><span class="p">)]</span> <span class="k">else</span><span class="p">:</span> <span class="n">comment_lines</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">return</span> <span class="n">comment_lines</span> </div> <div class="viewcode-block" id="BaseReader.write"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.BaseReader.html#astropy.io.ascii.core.BaseReader.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">):</span> <span class="sd">"""Write ``table`` as list of strings.</span> <span class="sd"> :param table: input table data (astropy.table.Table object)</span> <span class="sd"> :returns: list of strings corresponding to ASCII table</span> <span class="sd"> """</span> <span class="c"># link information about the columns to the writer object (i.e. self)</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">cols</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">cols</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">cols</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">cols</span> <span class="c"># Write header and data to lines list</span> <span class="n">lines</span> <span class="o">=</span> <span class="p">[]</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="k">return</span> <span class="n">lines</span> </div></div> <div class="viewcode-block" id="ContinuationLinesInputter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.ContinuationLinesInputter.html#astropy.io.ascii.core.ContinuationLinesInputter">[docs]</a><span class="k">class</span> <span class="nc">ContinuationLinesInputter</span><span class="p">(</span><span class="n">BaseInputter</span><span class="p">):</span> <span class="sd">"""Inputter where lines ending in ``continuation_char`` are joined</span> <span class="sd"> with the subsequent line. Example::</span> <span class="sd"> col1 col2 col3</span> <span class="sd"> 1 \</span> <span class="sd"> 2 3</span> <span class="sd"> 4 5 \</span> <span class="sd"> 6</span> <span class="sd"> """</span> <span class="n">continuation_char</span> <span class="o">=</span> <span class="s">'</span><span class="se">\\</span><span class="s">'</span> <span class="n">replace_char</span> <span class="o">=</span> <span class="s">' '</span> <span class="c"># If no_continue is not None then lines matching this regex are not subject</span> <span class="c"># to line continuation. The initial use case here is Daophot. In this</span> <span class="c"># case the continuation character is just replaced with replace_char.</span> <span class="n">no_continue</span> <span class="o">=</span> <span class="bp">None</span> <div class="viewcode-block" id="ContinuationLinesInputter.process_lines"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.ContinuationLinesInputter.html#astropy.io.ascii.core.ContinuationLinesInputter.process_lines">[docs]</a> <span class="k">def</span> <span class="nf">process_lines</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="n">re_no_continue</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">no_continue</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_continue</span> <span class="k">else</span> <span class="bp">None</span> <span class="n">parts</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">outlines</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span> <span class="k">if</span> <span class="n">re_no_continue</span> <span class="ow">and</span> <span class="n">re_no_continue</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">):</span> <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">continuation_char</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_char</span><span class="p">)</span> <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">continuation_char</span><span class="p">):</span> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">continuation_char</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_char</span><span class="p">))</span> <span class="k">else</span><span class="p">:</span> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="n">outlines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parts</span><span class="p">))</span> <span class="n">parts</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">return</span> <span class="n">outlines</span> </div></div> <div class="viewcode-block" id="WhitespaceSplitter"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.WhitespaceSplitter.html#astropy.io.ascii.core.WhitespaceSplitter">[docs]</a><span class="k">class</span> <span class="nc">WhitespaceSplitter</span><span class="p">(</span><span class="n">DefaultSplitter</span><span class="p">):</span> <div class="viewcode-block" id="WhitespaceSplitter.process_line"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.core.WhitespaceSplitter.html#astropy.io.ascii.core.WhitespaceSplitter.process_line">[docs]</a> <span class="k">def</span> <span class="nf">process_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span> <span class="sd">"""Replace tab with space within ``line`` while respecting quoted substrings"""</span> <span class="n">newline</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">in_quote</span> <span class="o">=</span> <span class="bp">False</span> <span class="n">lastchar</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span> <span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">quotechar</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">escapechar</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">lastchar</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escapechar</span><span class="p">):</span> <span class="n">in_quote</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">in_quote</span> <span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s">'</span><span class="se">\t</span><span class="s">'</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">in_quote</span><span class="p">:</span> <span class="n">char</span> <span class="o">=</span> <span class="s">' '</span> <span class="n">lastchar</span> <span class="o">=</span> <span class="n">char</span> <span class="n">newline</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="k">return</span> <span class="s">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">newline</span><span class="p">)</span> </div></div> <span class="n">extra_reader_pars</span> <span class="o">=</span> <span class="p">(</span><span class="s">'Reader'</span><span class="p">,</span> <span class="s">'Inputter'</span><span class="p">,</span> <span class="s">'Outputter'</span><span class="p">,</span> <span class="s">'delimiter'</span><span class="p">,</span> <span class="s">'comment'</span><span class="p">,</span> <span class="s">'quotechar'</span><span class="p">,</span> <span class="s">'header_start'</span><span class="p">,</span> <span class="s">'data_start'</span><span class="p">,</span> <span class="s">'data_end'</span><span class="p">,</span> <span class="s">'converters'</span><span class="p">,</span> <span class="s">'data_Splitter'</span><span class="p">,</span> <span class="s">'header_Splitter'</span><span class="p">,</span> <span class="s">'names'</span><span class="p">,</span> <span class="s">'include_names'</span><span class="p">,</span> <span class="s">'exclude_names'</span><span class="p">,</span> <span class="s">'fill_values'</span><span class="p">,</span> <span class="s">'fill_include_names'</span><span class="p">,</span> <span class="s">'fill_exclude_names'</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_get_reader</span><span class="p">(</span><span class="n">Reader</span><span class="p">,</span> <span class="n">Inputter</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">Outputter</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="sd">"""Initialize a table reader allowing for common customizations. See ui.get_reader()</span> <span class="sd"> for param docs. This routine is for internal (package) use only and is useful</span> <span class="sd"> because it depends only on the "core" module.</span> <span class="sd"> """</span> <span class="n">reader_kwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">]</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">extra_reader_pars</span><span class="p">)</span> <span class="n">reader</span> <span class="o">=</span> <span class="n">Reader</span><span class="p">(</span><span class="o">**</span><span class="n">reader_kwargs</span><span class="p">)</span> <span class="k">if</span> <span class="n">Inputter</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">inputter</span> <span class="o">=</span> <span class="n">Inputter</span><span class="p">()</span> <span class="n">reader</span><span class="o">.</span><span class="n">outputter</span> <span class="o">=</span> <span class="n">TableOutputter</span><span class="p">()</span> <span class="k">if</span> <span class="n">Outputter</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">outputter</span> <span class="o">=</span> <span class="n">Outputter</span><span class="p">()</span> <span class="k">if</span> <span class="s">'delimiter'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'delimiter'</span><span class="p">]</span> <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'delimiter'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'comment'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'comment'</span><span class="p">]</span> <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'comment'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'quotechar'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">quotechar</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'quotechar'</span><span class="p">]</span> <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">quotechar</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'quotechar'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'data_start'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">start_line</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'data_start'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'data_end'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">end_line</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'data_end'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'header_start'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">start_line</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'header_start'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'converters'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">outputter</span><span class="o">.</span><span class="n">converters</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'converters'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'data_Splitter'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'data_Splitter'</span><span class="p">]()</span> <span class="k">if</span> <span class="s">'header_Splitter'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'header_Splitter'</span><span class="p">]()</span> <span class="k">if</span> <span class="s">'names'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'names'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'include_names'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">include_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'include_names'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'exclude_names'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">exclude_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'exclude_names'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'fill_values'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_values</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'fill_values'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'fill_include_names'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_include_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'fill_include_names'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'fill_exclude_names'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">reader</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_exclude_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'fill_exclude_names'</span><span class="p">]</span> <span class="k">return</span> <span class="n">reader</span> <span class="n">extra_writer_pars</span> <span class="o">=</span> <span class="p">(</span><span class="s">'delimiter'</span><span class="p">,</span> <span class="s">'comment'</span><span class="p">,</span> <span class="s">'quotechar'</span><span class="p">,</span> <span class="s">'formats'</span><span class="p">,</span> <span class="s">'strip_whitespace'</span><span class="p">,</span> <span class="s">'names'</span><span class="p">,</span> <span class="s">'include_names'</span><span class="p">,</span> <span class="s">'exclude_names'</span><span class="p">,</span> <span class="s">'fill_values'</span><span class="p">,</span> <span class="s">'fill_include_names'</span><span class="p">,</span> <span class="s">'fill_exclude_names'</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_get_writer</span><span class="p">(</span><span class="n">Writer</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="sd">"""Initialize a table writer allowing for common customizations. This</span> <span class="sd"> routine is for internal (package) use only and is useful because it depends</span> <span class="sd"> only on the "core" module. """</span> <span class="n">writer_kwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">]</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">extra_writer_pars</span><span class="p">)</span> <span class="n">writer</span> <span class="o">=</span> <span class="n">Writer</span><span class="p">(</span><span class="o">**</span><span class="n">writer_kwargs</span><span class="p">)</span> <span class="k">if</span> <span class="s">'delimiter'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'delimiter'</span><span class="p">]</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'delimiter'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'comment'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">write_comment</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'comment'</span><span class="p">]</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">write_comment</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'comment'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'quotechar'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">quotechar</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'quotechar'</span><span class="p">]</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">quotechar</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'quotechar'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'formats'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">formats</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'formats'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'strip_whitespace'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="k">if</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'strip_whitespace'</span><span class="p">]:</span> <span class="c"># Restore the default SplitterClass process_val method which strips</span> <span class="c"># whitespace. This may have been changed in the Writer</span> <span class="c"># initialization (e.g. Rdb and Tab)</span> <span class="n">Class</span> <span class="o">=</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">__class__</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">process_val</span> <span class="o">=</span> <span class="n">Class</span><span class="o">.</span><span class="n">process_val</span><span class="o">.</span><span class="n">__get__</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Class</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">process_val</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">if</span> <span class="s">'names'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'names'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'include_names'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">include_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'include_names'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'exclude_names'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">writer</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">exclude_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'exclude_names'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'fill_values'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_values</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'fill_values'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'fill_include_names'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_include_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'fill_include_names'</span><span class="p">]</span> <span class="k">if</span> <span class="s">'fill_exclude_names'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">writer</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">fill_exclude_names</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'fill_exclude_names'</span><span class="p">]</span> <span class="k">return</span> <span class="n">writer</span> </pre></div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"><h3>Page Contents</h3> </div> </div> <div class="clearer"></div> </div> <footer class="footer"> <p class="pull-right"> <a href="#">Back to Top</a></p> <p> © Copyright 2011-2013, The Astropy Developers.<br/> Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. Last built 22 Oct 2013. <br/> </p> </footer> </body> </html>