Hello!<div>My name is Denis Kolodin. I live in Russia, Tambov.<div>I was developing much time with C, Java, C#, R. But two month ago I&#39;m using Python.</div><div>It&#39;s really cool. Now, I move ALL my projects to it fully and have some ideas which API&#39;s</div>
<div>extensions may will be useful.</div><div>The first thing I want to say about is an extension of CSV api. In R language I could to set types for</div><div>the every column in a csv file. I propose to add a same function to the Python&#39;s standard library.</div>
<div>Here it is (Python 3 version):</div><div><span class="Apple-style-span" style="font-family: &#39;Times New Roman&#39;; font-size: medium; "><pre style="background-color: transparent; border-top-width: 1px; border-top-style: none; border-top-color: rgb(204, 204, 204); border-bottom-width: 1px; border-bottom-style: none; border-bottom-color: rgb(204, 204, 204); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-size: 13px; font-family: &#39;Bitstream Vera Sans Mono&#39;, monospace; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-style: none; border-left-style: none; border-width: initial; border-color: initial; overflow-x: auto; overflow-y: auto; ">
<span class="kn" style="color: rgb(0, 112, 32); font-weight: bold; ">import</span> <span class="nn" style="color: rgb(14, 132, 181); font-weight: bold; ">csv</span>

<span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">def</span> <span class="nf" style="color: rgb(6, 40, 126); ">reader2</span><span class="p">(</span><span class="n">csvfile</span><span class="p">,</span> <span class="n">frame</span><span class="p">,</span> <span class="n"><b>delimiter</b></span><span class="o" style="color: rgb(102, 102, 102); "><b>=</b></span><span class="s" style="color: rgb(64, 112, 160); "><b>&#39;;&#39;</b></span><span class="p">,</span> <span class="o" style="color: rgb(102, 102, 102); ">**</span><span class="n">fmtparams</span><span class="p">):</span>
    <span class="n">reader</span> <span class="o" style="color: rgb(102, 102, 102); ">=</span> <span class="n">csv</span><span class="o" style="color: rgb(102, 102, 102); ">.</span><span class="n">reader</span><span class="p">(</span><span class="n">csvfile</span><span class="p">,</span> delimiter=delimiter, <span class="o" style="color: rgb(102, 102, 102); ">**</span><span class="n">fmtparams</span><span class="p">)</span>
    <span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">for</span> <span class="n">row</span> <span class="ow" style="color: rgb(0, 112, 32); font-weight: bold; ">in</span> <span class="n">reader</span><span class="p">:</span>
        <span class="n">l</span> <span class="o" style="color: rgb(102, 102, 102); ">=</span> <span class="nb" style="color: rgb(0, 112, 32); ">min</span><span class="p">(</span><span class="nb" style="color: rgb(0, 112, 32); ">len</span><span class="p">(</span><span class="n">row</span><span class="p">),</span> <span class="nb" style="color: rgb(0, 112, 32); ">len</span><span class="p">(</span><span class="n">frame</span><span class="p">))</span>
        <span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">yield</span> <span class="p">[</span><span class="n">frame</span><span class="p">[</span><span class="n">idx</span><span class="p">](</span><span class="n">row</span><span class="p">[</span><span class="n">idx</span><span class="p">])</span> <span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">for</span> <span class="n">idx</span> <span class="ow" style="color: rgb(0, 112, 32); font-weight: bold; ">in</span> <span class="nb" style="color: rgb(0, 112, 32); ">range</span><span class="p">(</span><span class="n">l</span><span class="p">)]</span></pre>
</span></div><div>This&#39;s generator function which converts an every column to the associated type.</div><div>In <b><i>frame </i></b>argument you must to set tuple/list of functions which will uses to</div><div>convert values in same positions of row from csv file. Frame looks like list of types )))</div>
<div>By default it uses &#39;;&#39; delimiter to make float values conversion are possible.</div><div><br></div><div>As a sample you have the csv file like:</div><div><b><i>Any spam...; 1; 2.0; 3</i></b></div><div><br></div>
<div>I&#39;ve saved it to &quot;sample.csv&quot; :)</div><div><br></div><div>If you are using function reader in the standard &quot;csv&quot; module you get rows as a list of strings :(</div><div><i>&gt;&gt;&gt; reader = csv.reader(open(&quot;sample.csv&quot;), delimiter=&quot;;&quot;)</i></div>
<div><div><i>&gt;&gt;&gt; print(next(reader))</i></div><div><i>[&#39;Any spam...&#39;, &#39; 1&#39;, &#39; 2.0&#39;, &#39; 3&#39;]</i></div><div><i><br></i></div><div><i><span class="Apple-style-span" style="font-style: normal; "><div>
It&#39;s not bad in certan situatiuons. But with &quot;reader2&quot; function you can get a list with necessary types:</div><div><br></div><div><div><i>&gt;&gt;&gt; reader = reader2(open(&quot;foodstuffs.csv&quot;), (str, int, float, int))</i></div>
<div><i>&gt;&gt;&gt; print(next(reader))</i></div><div><i>[&#39;Any spam...&#39;, 1, 2.0, 3]</i></div><div><br></div><div>Now you can work with items without extra conversions. <img src="cid:360@goomoji.gmail" style="margin-top: 0px; margin-right: 0.2ex; margin-bottom: 0px; margin-left: 0.2ex; vertical-align: middle; " goomoji="360"></div>
<div>I think it&#39;s good to add this function to the standard library. I&#39;ve already used it many times.</div><div>This function can be useful for many people who works with csv files.</div><div>And I suppose it conforms to &quot;batteries included&quot; philosophy.</div>
<div><br></div><div>What do you think about this extension?</div><div>Is it possible to add this function to standard library or to add the same behavior to</div><div>the standard &quot;readed&quot; function <i><span class="Apple-style-span" style="font-style: normal; "><div style="display: inline !important; ">
<div style="display: inline !important; ">in &quot;csv&quot; Python&#39;s module?</div></div></span></i></div><div><br></div><div>Best Regards,</div><div>Denis Kolodin</div></div><div>Russia, Tambov</div></span></i></div>
<div><br></div></div><div><br><div class="gmail_quote">2010/4/10  <span dir="ltr">&lt;<a href="mailto:python-dev-request@python.org">python-dev-request@python.org</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Send Python-Dev mailing list submissions to<br>
        <a href="mailto:python-dev@python.org">python-dev@python.org</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="http://mail.python.org/mailman/listinfo/python-dev" target="_blank">http://mail.python.org/mailman/listinfo/python-dev</a><br>
or, via email, send a message with subject or body &#39;help&#39; to<br>
        <a href="mailto:python-dev-request@python.org">python-dev-request@python.org</a><br>
<br>
You can reach the person managing the list at<br>
        <a href="mailto:python-dev-owner@python.org">python-dev-owner@python.org</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than &quot;Re: Contents of Python-Dev digest...&quot;<br>
<br>
<br>
Today&#39;s Topics:<br>
<br>
   1. Re: PEP 3147, __cached__, and PyImport_ExecCodeModuleEx()<br>
      (Guido van Rossum)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Fri, 9 Apr 2010 17:41:48 -0700<br>
From: Guido van Rossum &lt;<a href="mailto:guido@python.org">guido@python.org</a>&gt;<br>
To: Paul Moore &lt;<a href="mailto:p.f.moore@gmail.com">p.f.moore@gmail.com</a>&gt;<br>
Cc: Python-Dev Dev &lt;<a href="mailto:python-dev@python.org">python-dev@python.org</a>&gt;<br>
Subject: Re: [Python-Dev] PEP 3147, __cached__, and<br>
        PyImport_ExecCodeModuleEx()<br>
Message-ID:<br>
        &lt;<a href="mailto:h2pca471dc21004091741tb818fdb0k86f65f7adedb7d12@mail.gmail.com">h2pca471dc21004091741tb818fdb0k86f65f7adedb7d12@mail.gmail.com</a>&gt;<br>
Content-Type: text/plain; charset=ISO-8859-1<br>
<br>
On Fri, Apr 9, 2010 at 3:54 PM, Paul Moore &lt;<a href="mailto:p.f.moore@gmail.com">p.f.moore@gmail.com</a>&gt; wrote:<br>
&gt; On 9 April 2010 23:00, Barry Warsaw &lt;<a href="mailto:barry@python.org">barry@python.org</a>&gt; wrote:<br>
&gt;&gt; On Apr 09, 2010, at 02:52 PM, Guido van Rossum wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt;It may be undocumented but it doesn&#39;t start with _ and it exists to<br>
&gt;&gt;&gt;preserve backwards compatibility. So I recommend adding<br>
&gt;&gt;&gt;PyImport_ExecCodeModuleExEx().<br>
&gt;&gt;<br>
&gt;&gt; Cool, thanks. ?Now I can&#39;t wait for PyImport_ExecCodeModuleExExEx() :)<br>
&gt;<br>
&gt; Would it be better to name this one _PyImport_ExecCodeModuleExEx (with<br>
&gt; an underscore) so that we *don&#39;t* need to create an ExExEx version in<br>
&gt; future? (Sorry, Barry :-))<br>
<br>
I don&#39;t care about what name you pick, and my ExEx proposal was meant<br>
to include half a wink, but <a href="http://docs.python.org/c-api/import.html" target="_blank">http://docs.python.org/c-api/import.html</a><br>
makes it clear that PyImport_ExecCodeModuleEx() is far from private!<br>
(I don&#39;t know where Barry got that idea.) While Google Code Search<br>
finds mostly references to PyImport_ExecCodeModuleEx in the Python<br>
source code and various copies of it, it also shows some real uses,<br>
e.g.<br>
<a href="http://www.google.com/codesearch/p?hl=en#bkFK9YpaWlI/ubuntu/pool/universe/y/yehia/yehia_0.5.4.orig.tar.gz|PZ0_Xf7QzC0/yehia-0.5.4.orig/plugins/python/python-loader.cc&amp;q=PyImport_ExecCodeModuleEx" target="_blank">http://www.google.com/codesearch/p?hl=en#bkFK9YpaWlI/ubuntu/pool/universe/y/yehia/yehia_0.5.4.orig.tar.gz|PZ0_Xf7QzC0/yehia-0.5.4.orig/plugins/python/python-loader.cc&amp;q=PyImport_ExecCodeModuleEx</a><br>

<br>
--<br>
--Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)<br>
<br>
<br>
------------------------------<br>
<br>
_______________________________________________<br>
Python-Dev mailing list<br>
<a href="mailto:Python-Dev@python.org">Python-Dev@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-dev" target="_blank">http://mail.python.org/mailman/listinfo/python-dev</a><br>
<br>
<br>
End of Python-Dev Digest, Vol 81, Issue 31<br>
******************************************<br>
</blockquote></div><br></div></div>