292 lines
22 KiB
HTML
292 lines
22 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<title>data — pylib 2019.5.19 documentation</title>
|
|
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
|
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
|
|
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></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/language_data.js"></script>
|
|
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
|
<link rel="index" title="Index" href="../genindex.html" />
|
|
<link rel="search" title="Search" href="../search.html" />
|
|
|
|
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
|
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
|
|
|
</head><body>
|
|
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
|
|
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for data</h1><div class="highlight"><pre>
|
|
<span></span><span class="ch">#!/usr/bin/env python</span>
|
|
<span class="c1"># -*- coding: utf-8 -*-</span>
|
|
<span class="sd">"""Read and write data to or from file and manipulate data structures.</span>
|
|
|
|
<span class="sd">:Date: 2019-10-11</span>
|
|
|
|
<span class="sd">.. module:: data</span>
|
|
<span class="sd"> :platform: *nix, Windows</span>
|
|
<span class="sd"> :synopsis: Handle data files and structures.</span>
|
|
|
|
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></span>
|
|
<span class="sd">"""</span>
|
|
<span class="kn">import</span> <span class="nn">math</span>
|
|
<span class="kn">import</span> <span class="nn">pickle</span>
|
|
|
|
<div class="viewcode-block" id="read"><a class="viewcode-back" href="../data.html#data.read">[docs]</a><span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">x_column</span><span class="p">,</span> <span class="n">y_column</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="sd">"""Read ascii data file.</span>
|
|
|
|
<span class="sd"> :param filename: file to read</span>
|
|
<span class="sd"> :type filename: str</span>
|
|
<span class="sd"> :param x_column: column index for the x data (first column is 0)</span>
|
|
<span class="sd"> :type x_column: int</span>
|
|
<span class="sd"> :param y_column: column index for the y data (first column is 0)</span>
|
|
<span class="sd"> :type y_column: int</span>
|
|
<span class="sd"> :param default: return object if data loading fails</span>
|
|
<span class="sd"> :type default: object</span>
|
|
<span class="sd"> :param verbose: verbose information (default = False)</span>
|
|
<span class="sd"> :type verbose: bool</span>
|
|
|
|
<span class="sd"> :returns: x and y</span>
|
|
<span class="sd"> :rtype: tuple(list, list)</span>
|
|
<span class="sd"> """</span>
|
|
<span class="kn">import</span> <span class="nn">re</span>
|
|
|
|
<span class="n">x</span> <span class="o">=</span> <span class="n">default</span>
|
|
<span class="n">y</span> <span class="o">=</span> <span class="n">default</span>
|
|
|
|
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s1">'check if data is available'</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span>
|
|
<span class="n">x</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">y</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">file</span><span class="p">:</span>
|
|
<span class="n">fields</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">r</span><span class="s1">'\s+'</span><span class="p">,</span> <span class="n">row</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
|
<span class="n">x</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">fields</span><span class="p">[</span><span class="n">x_column</span><span class="p">]))</span>
|
|
<span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">fields</span><span class="p">[</span><span class="n">y_column</span><span class="p">]))</span>
|
|
<span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
|
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s1">'data file not found'</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span></div>
|
|
|
|
<div class="viewcode-block" id="write"><a class="viewcode-back" href="../data.html#data.write">[docs]</a><span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="sd">"""Write ascii file.</span>
|
|
|
|
<span class="sd"> :param file_name: file to write</span>
|
|
<span class="sd"> :type file_name: str</span>
|
|
<span class="sd"> :param data: data to write</span>
|
|
<span class="sd"> :type data: str</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
|
|
<span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="load"><a class="viewcode-back" href="../data.html#data.load">[docs]</a><span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="sd">"""Load stored program objects from binary file.</span>
|
|
|
|
<span class="sd"> :param file_name: file to load</span>
|
|
<span class="sd"> :type file_name: str</span>
|
|
<span class="sd"> :param default: return object if data loading fails</span>
|
|
<span class="sd"> :type default: object</span>
|
|
<span class="sd"> :param verbose: verbose information (default = False)</span>
|
|
<span class="sd"> :type verbose: bool</span>
|
|
|
|
<span class="sd"> :returns: loaded data</span>
|
|
<span class="sd"> :rtype: object</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s1">'check if data is available'</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="nb">input</span><span class="p">:</span>
|
|
<span class="c1"># one load for every dump is needed to load all the data</span>
|
|
<span class="n">object_data</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">input</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s1">'found:'</span><span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="n">object_data</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
|
|
<span class="n">object_data</span> <span class="o">=</span> <span class="n">default</span>
|
|
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s1">'no saved datas found'</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">object_data</span></div>
|
|
|
|
<div class="viewcode-block" id="store"><a class="viewcode-back" href="../data.html#data.store">[docs]</a><span class="k">def</span> <span class="nf">store</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">object_data</span><span class="p">):</span>
|
|
<span class="sd">"""Store program objects to binary file.</span>
|
|
|
|
<span class="sd"> :param file_name: file to store</span>
|
|
<span class="sd"> :type file_name: str</span>
|
|
<span class="sd"> :param object_data: data to store</span>
|
|
<span class="sd"> :type object_data: object</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s1">'wb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">output</span><span class="p">:</span>
|
|
<span class="c1"># every dump needs a load</span>
|
|
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">object_data</span><span class="p">,</span> <span class="n">output</span><span class="p">,</span> <span class="n">pickle</span><span class="o">.</span><span class="n">HIGHEST_PROTOCOL</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="fold_list"><a class="viewcode-back" href="../data.html#data.fold_list">[docs]</a><span class="k">def</span> <span class="nf">fold_list</span><span class="p">(</span><span class="n">lst</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
|
|
<span class="sd">"""Convert one-dimensional kx1 array (list) to two-dimensional mxn</span>
|
|
<span class="sd"> array. m = k / n</span>
|
|
|
|
<span class="sd"> :param lst: list to convert</span>
|
|
<span class="sd"> :type lst: list</span>
|
|
<span class="sd"> :param n: length of the second dimenson</span>
|
|
<span class="sd"> :type n: int</span>
|
|
|
|
<span class="sd"> :returns: two-dimensional array (list of lists)</span>
|
|
<span class="sd"> :rtype: list</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">k</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lst</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">k</span> <span class="o">%</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">length</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">k</span><span class="o">/</span><span class="n">n</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">lst</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="n">n</span><span class="p">:</span><span class="n">i</span><span class="o">*</span><span class="n">n</span><span class="o">+</span><span class="n">n</span><span class="p">]</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="n">length</span><span class="p">)]</span></div>
|
|
|
|
<div class="viewcode-block" id="seq"><a class="viewcode-back" href="../data.html#data.seq">[docs]</a><span class="k">def</span> <span class="nf">seq</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">stop</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">step</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
|
|
<span class="sa">r</span><span class="sd">"""Create an arithmetic bounded sequence.</span>
|
|
|
|
<span class="sd"> The sequence is one of the following;</span>
|
|
|
|
<span class="sd"> - empty :math:`\{\}=\emptyset`, if start and stop are the same</span>
|
|
<span class="sd"> - degenerate :math:`\{a\}`, if the sequence has only one element.</span>
|
|
<span class="sd"> - left-close and right-open :math:`[a, b)`</span>
|
|
|
|
<span class="sd"> :param start: start of the sequence, the lower bound. If only start</span>
|
|
<span class="sd"> is given than it is interpreted as stop and start will be 0.</span>
|
|
<span class="sd"> :type start: int or float</span>
|
|
<span class="sd"> :param stop: stop of sequence, the upper bound.</span>
|
|
<span class="sd"> :type stop: int or float</span>
|
|
<span class="sd"> :param step: step size, the common difference (constant difference</span>
|
|
<span class="sd"> between consecutive terms).</span>
|
|
<span class="sd"> :type step: int or float</span>
|
|
<span class="sd"> :returns: arithmetic bounded sequence</span>
|
|
<span class="sd"> :rtype: list</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">stop</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">seq</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
|
|
|
|
<span class="n">start_str</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
|
|
<span class="n">start_exp</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">if</span> <span class="s1">'.'</span> <span class="ow">in</span> <span class="n">start_str</span><span class="p">:</span>
|
|
<span class="n">start_exp</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)[</span><span class="mi">1</span><span class="p">])</span>
|
|
|
|
<span class="n">step_str</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">step</span><span class="p">)</span>
|
|
<span class="n">step_exp</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">if</span> <span class="s1">'.'</span> <span class="ow">in</span> <span class="n">step_str</span><span class="p">:</span>
|
|
<span class="n">step_exp</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">step_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)[</span><span class="mi">1</span><span class="p">])</span>
|
|
|
|
<span class="n">exponent</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">start_exp</span><span class="p">,</span> <span class="n">step_exp</span><span class="p">)</span> <span class="c1"># no stop because it is an open bound</span>
|
|
|
|
<span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">((</span><span class="n">stop</span> <span class="o">-</span> <span class="n">start</span><span class="p">)</span><span class="o">/</span><span class="nb">float</span><span class="p">(</span><span class="n">step</span><span class="p">)))</span>
|
|
<span class="n">lst</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">if</span> <span class="n">n</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">lst</span> <span class="o">=</span> <span class="p">[</span><span class="nb">round</span><span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">step</span><span class="o">*</span><span class="n">i</span><span class="p">,</span> <span class="n">exponent</span><span class="p">)</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="n">n</span><span class="p">)]</span>
|
|
<span class="k">return</span> <span class="n">lst</span></div>
|
|
|
|
<div class="viewcode-block" id="unique_ending"><a class="viewcode-back" href="../data.html#data.unique_ending">[docs]</a><span class="k">def</span> <span class="nf">unique_ending</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
|
|
<span class="sd">"""From id list get list with unique ending.</span>
|
|
|
|
<span class="sd"> :param ids: ids</span>
|
|
<span class="sd"> :type ids: list</span>
|
|
<span class="sd"> :param n: minumum chars or ints</span>
|
|
<span class="sd"> :type n: int</span>
|
|
|
|
<span class="sd"> :returns: unique ending of ids</span>
|
|
<span class="sd"> :rtype: list</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">ids</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">idi</span><span class="p">[</span><span class="o">-</span><span class="n">n</span><span class="p">:]</span> <span class="k">for</span> <span class="n">idi</span> <span class="ow">in</span> <span class="n">ids</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">x</span><span class="p">)):</span>
|
|
<span class="k">return</span> <span class="n">unique_ending</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">x</span></div>
|
|
|
|
<div class="viewcode-block" id="get_id"><a class="viewcode-back" href="../data.html#data.get_id">[docs]</a><span class="k">def</span> <span class="nf">get_id</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">uide</span><span class="p">):</span>
|
|
<span class="sd">"""Get full id from unique id ending.</span>
|
|
|
|
<span class="sd"> :param ids: ids</span>
|
|
<span class="sd"> :type ids: list</span>
|
|
<span class="sd"> :param uide: unique id ending</span>
|
|
<span class="sd"> :type uide: str</span>
|
|
|
|
<span class="sd"> :returns: full id</span>
|
|
<span class="sd"> :rtype: str or int</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># take first element, because we know it is a unique ending</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">idi</span> <span class="k">for</span> <span class="n">idi</span> <span class="ow">in</span> <span class="n">ids</span> <span class="k">if</span> <span class="n">idi</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">uide</span><span class="p">)][</span><span class="mi">0</span><span class="p">]</span></div>
|
|
</pre></div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<h1 class="logo"><a href="../index.html">pylib</a></h1>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3>Navigation</h3>
|
|
|
|
<div class="relations">
|
|
<h3>Related Topics</h3>
|
|
<ul>
|
|
<li><a href="../index.html">Documentation overview</a><ul>
|
|
<li><a href="index.html">Module code</a><ul>
|
|
</ul></li>
|
|
</ul></li>
|
|
</ul>
|
|
</div>
|
|
<div id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" />
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">$('#searchbox').show(0);</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="footer">
|
|
©2019, Daniel Weschke.
|
|
|
|
|
|
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.0</a>
|
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
</html> |