Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 82fd441cd3f2a8bc33fc3ed41403eced > files > 1476

python-astropy-0.2.4-4.mga4.x86_64.rpm


<!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.basic &mdash; 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>
	 &raquo;
      </li>
      <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li>
      
       
    </ul>
</div>
  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <h1>Source code for astropy.io.ascii.basic</h1><div class="highlight"><pre>
<span class="c"># Licensed under a 3-clause BSD style license - see LICENSE.rst</span>
<span class="sd">&quot;&quot;&quot;An extensible ASCII table reader and writer.</span>

<span class="sd">basic.py:</span>
<span class="sd">  Basic table read / write functionality for simple character</span>
<span class="sd">  delimited files with various options for column header definition.</span>

<span class="sd">:Copyright: Smithsonian Astrophysical Observatory (2011)</span>
<span class="sd">:Author: Tom Aldcroft (aldcroft@head.cfa.harvard.edu)</span>
<span class="sd">&quot;&quot;&quot;</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 &quot;AS IS&quot; 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 &lt;COPYRIGHT HOLDER&gt; 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">re</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">core</span>
<span class="kn">from</span> <span class="nn">.core</span> <span class="kn">import</span> <span class="n">io</span><span class="p">,</span> <span class="nb">next</span><span class="p">,</span> <span class="n">izip</span><span class="p">,</span> <span class="nb">any</span>

<div class="viewcode-block" id="Basic"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.basic.Basic.html#astropy.io.ascii.basic.Basic">[docs]</a><span class="k">class</span> <span class="nc">Basic</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BaseReader</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Read a character-delimited table with a single header line at the top</span>
<span class="sd">    followed by data lines to the end of the table.  Lines beginning with # as</span>
<span class="sd">    the first non-whitespace character are comments.  This reader is highly</span>
<span class="sd">    configurable.</span>
<span class="sd">    ::</span>

<span class="sd">        rdr = ascii.get_reader(Reader=ascii.Basic)</span>
<span class="sd">        rdr.header.splitter.delimiter = &#39; &#39;</span>
<span class="sd">        rdr.data.splitter.delimiter = &#39; &#39;</span>
<span class="sd">        rdr.header.start_line = 0</span>
<span class="sd">        rdr.data.start_line = 1</span>
<span class="sd">        rdr.data.end_line = None</span>
<span class="sd">        rdr.header.comment = r&#39;\s*#&#39;</span>
<span class="sd">        rdr.data.comment = r&#39;\s*#&#39;</span>

<span class="sd">    Example table::</span>

<span class="sd">      # Column definition is the first uncommented line</span>
<span class="sd">      # Default delimiter is the space character.</span>
<span class="sd">      apples oranges pears</span>

<span class="sd">      # Data starts after the header column definition, blank lines ignored</span>
<span class="sd">      1 2 3</span>
<span class="sd">      4 5 6</span>
<span class="sd">    &quot;&quot;&quot;</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">core</span><span class="o">.</span><span class="n">BaseReader</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="bp">self</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="s">&#39; &#39;</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">delimiter</span> <span class="o">=</span> <span class="s">&#39; &#39;</span>
        <span class="bp">self</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="mi">0</span>
        <span class="bp">self</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="mi">1</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="o">=</span> <span class="s">r&#39;\s*#&#39;</span>
        <span class="bp">self</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="s">&#39;# &#39;</span>
        <span class="bp">self</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="s">r&#39;\s*#&#39;</span>
        <span class="bp">self</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="s">&#39;# &#39;</span>

</div>
<div class="viewcode-block" id="NoHeader"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.basic.NoHeader.html#astropy.io.ascii.basic.NoHeader">[docs]</a><span class="k">class</span> <span class="nc">NoHeader</span><span class="p">(</span><span class="n">Basic</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Read a table with no header line.  Columns are autonamed using</span>
<span class="sd">    header.auto_format which defaults to &quot;col%d&quot;.  Otherwise this reader</span>
<span class="sd">    the same as the :class:`Basic` class from which it is derived.  Example::</span>

<span class="sd">      # Table data</span>
<span class="sd">      1 2 &quot;hello there&quot;</span>
<span class="sd">      3 4 world</span>
<span class="sd">    &quot;&quot;&quot;</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">Basic</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="bp">self</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="bp">None</span>
        <span class="bp">self</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="mi">0</span>

</div>
<span class="k">class</span> <span class="nc">CommentedHeaderHeader</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BaseHeader</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Header class for which the column definition line starts with the</span>
<span class="sd">    comment character.  See the :class:`CommentedHeader` class  for an example.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <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">&quot;&quot;&quot;Return only lines that start with the comment regexp.  For these</span>
<span class="sd">        lines strip out the matching characters.&quot;&quot;&quot;</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">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span>
            <span class="n">match</span> <span class="o">=</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">if</span> <span class="n">match</span><span class="p">:</span>
                <span class="k">yield</span> <span class="n">line</span><span class="p">[</span><span class="n">match</span><span class="o">.</span><span class="n">end</span><span class="p">():]</span>

    <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="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">write_comment</span> <span class="o">+</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 class="viewcode-block" id="CommentedHeader"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.basic.CommentedHeader.html#astropy.io.ascii.basic.CommentedHeader">[docs]</a><span class="k">class</span> <span class="nc">CommentedHeader</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BaseReader</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Read a file where the column names are given in a line that begins with</span>
<span class="sd">    the header comment character. `header_start` can be used to specify the</span>
<span class="sd">    line index of column names, and it can be a negative index (for example -1</span>
<span class="sd">    for the last commented line).  The default delimiter is the &lt;space&gt;</span>
<span class="sd">    character.::</span>

<span class="sd">      # col1 col2 col3</span>
<span class="sd">      # Comment line</span>
<span class="sd">      1 2 3</span>
<span class="sd">      4 5 6</span>
<span class="sd">    &quot;&quot;&quot;</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">core</span><span class="o">.</span><span class="n">BaseReader</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="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">CommentedHeaderHeader</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">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">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">splitter</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">=</span> <span class="s">&#39; &#39;</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">delimiter</span> <span class="o">=</span> <span class="s">&#39; &#39;</span>
        <span class="bp">self</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="mi">0</span>
        <span class="bp">self</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="mi">0</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="o">=</span> <span class="s">r&#39;\s*#&#39;</span>
        <span class="bp">self</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="s">&#39;# &#39;</span>
        <span class="bp">self</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="s">r&#39;\s*#&#39;</span>
        <span class="bp">self</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="s">&#39;# &#39;</span>

</div>
<div class="viewcode-block" id="Tab"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.basic.Tab.html#astropy.io.ascii.basic.Tab">[docs]</a><span class="k">class</span> <span class="nc">Tab</span><span class="p">(</span><span class="n">Basic</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Read a tab-separated file.  Unlike the :class:`Basic` reader, whitespace is</span>
<span class="sd">    not stripped from the beginning and end of lines.  By default whitespace is</span>
<span class="sd">    still stripped from the beginning and end of individual column values.</span>

<span class="sd">    Example::</span>

<span class="sd">      col1 &lt;tab&gt; col2 &lt;tab&gt; col3</span>
<span class="sd">      # Comment line</span>
<span class="sd">      1 &lt;tab&gt; 2 &lt;tab&gt; 5</span>
<span class="sd">    &quot;&quot;&quot;</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">Basic</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="bp">self</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="s">&#39;</span><span class="se">\t</span><span class="s">&#39;</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">delimiter</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\t</span><span class="s">&#39;</span>
        <span class="c"># Don&#39;t strip line whitespace since that includes tabs</span>
        <span class="bp">self</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">process_line</span> <span class="o">=</span> <span class="bp">None</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">process_line</span> <span class="o">=</span> <span class="bp">None</span>
        <span class="c"># Don&#39;t strip data value whitespace since that is significant in TSV tables</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">process_val</span> <span class="o">=</span> <span class="bp">None</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">skipinitialspace</span> <span class="o">=</span> <span class="bp">False</span>

</div>
<div class="viewcode-block" id="Rdb"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.basic.Rdb.html#astropy.io.ascii.basic.Rdb">[docs]</a><span class="k">class</span> <span class="nc">Rdb</span><span class="p">(</span><span class="n">Tab</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Read a tab-separated file with an extra line after the column definition</span>
<span class="sd">    line.  The RDB format meets this definition.  Example::</span>

<span class="sd">      col1 &lt;tab&gt; col2 &lt;tab&gt; col3</span>
<span class="sd">      N &lt;tab&gt; S &lt;tab&gt; N</span>
<span class="sd">      1 &lt;tab&gt; 2 &lt;tab&gt; 5</span>

<span class="sd">    In this reader the second line is just ignored.</span>
<span class="sd">    &quot;&quot;&quot;</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">Tab</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="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">RdbHeader</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">start_line</span> <span class="o">=</span> <span class="mi">0</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="o">=</span> <span class="s">r&#39;\s*#&#39;</span>
        <span class="bp">self</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="s">&#39;# &#39;</span>
        <span class="bp">self</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="s">&#39;</span><span class="se">\t</span><span class="s">&#39;</span>
        <span class="bp">self</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">process_line</span> <span class="o">=</span> <span class="bp">None</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">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">data</span><span class="o">.</span><span class="n">start_line</span> <span class="o">=</span> <span class="mi">2</span>

</div>
<span class="k">class</span> <span class="nc">RdbHeader</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BaseHeader</span><span class="p">):</span>
    <span class="n">col_type_map</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;n&#39;</span><span class="p">:</span> <span class="n">core</span><span class="o">.</span><span class="n">NumType</span><span class="p">,</span>
                    <span class="s">&#39;s&#39;</span><span class="p">:</span> <span class="n">core</span><span class="o">.</span><span class="n">StrType</span><span class="p">}</span>

    <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><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>

    <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">&quot;&quot;&quot;Initialize the header Column objects from the table ``lines``.</span>

<span class="sd">        This is a specialized get_cols for the RDB type:</span>
<span class="sd">        Line 0: RDB col names</span>
<span class="sd">        Line 1: RDB col definitions</span>
<span class="sd">        Line 2+: RDB data rows</span>

<span class="sd">        :param lines: list of table lines</span>
<span class="sd">        :returns: None</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">header_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="c"># this is a generator</span>
        <span class="n">header_vals_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">hl</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">hl</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">2</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">header_lines</span><span class="p">))]</span>
        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">header_vals_list</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">&#39;RDB header requires 2 lines&#39;</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="n">raw_types</span> <span class="o">=</span> <span class="n">header_vals_list</span>

        <span class="k">if</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="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_types</span><span class="p">):</span>
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;RDB header mismatch between number of column names and column types&#39;</span><span class="p">)</span>

        <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="ow">not</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s">r&#39;\d*(N|S)$&#39;</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">IGNORECASE</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">raw_types</span><span class="p">):</span>
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;RDB types definitions do not all match [num](N|S): </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">raw_types</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>
        <span class="k">for</span> <span class="n">col</span><span class="p">,</span> <span class="n">raw_type</span> <span class="ow">in</span> <span class="nb">zip</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="n">raw_types</span><span class="p">):</span>
            <span class="n">col</span><span class="o">.</span><span class="n">raw_type</span> <span class="o">=</span> <span class="n">raw_type</span>
            <span class="n">col</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_col_type</span><span class="p">(</span><span class="n">col</span><span class="p">)</span>

    <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="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>
        <span class="n">rdb_types</span> <span class="o">=</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="c"># Check if dtype.kind is string or unicode.  See help(np.core.numerictypes)</span>
            <span class="n">rdb_type</span> <span class="o">=</span> <span class="s">&#39;S&#39;</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">dtype</span><span class="o">.</span><span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;S&#39;</span><span class="p">,</span> <span class="s">&#39;U&#39;</span><span class="p">)</span> <span class="k">else</span> <span class="s">&#39;N&#39;</span>
            <span class="n">rdb_types</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rdb_type</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">rdb_types</span><span class="p">))</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"> &nbsp;
    <a href="#">Back to Top</a></p>
  <p>
    &copy; Copyright 2011-2013, The Astropy Developers.<br/>
    Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. &nbsp;
    Last built 22 Oct 2013. <br/>
  </p>
</footer>
  </body>
</html>