Hola a tod@s,<div><br></div><div>Tengo la siguiente situación:</div><div><br></div><div>Un archivo de 29Mb que contiene 281.351 lineas.  El archivo tiene la siguiente estructura:</div><div><br></div><div><div>1|2011-05-20 23:08:56|122711527|OPERADOR1|HOST TO HOST|212454|10000|HOST CLIENTE|192630167   </div>

<div>2|2011-05-20 23:09:08|122711530|OPERADOR12|HOST TO HOST|57212454|1000|HOST CLIENTE|192630168   </div><div>3|2011-05-20 23:09:42|122711538|OPERADOR1|HOST TO HOST|454545454545|2000|HOST CLIENTE|192630169   </div><div>
4|2011-05-20 23:10:03|122711544|OPERADOR1|HOST TO HOST|121221211|20000|HOST CLIENTE|192630170   </div>
<div>5|2011-05-20 23:10:09|122711547|OPERADOR1|HOST TO HOST ESPECIAL|4545|5000|HOST CLIENTE|192630171   </div><div>6|2011-05-20 23:10:46|122711554|OPERADOR1|HOST TO HOST ESPECIAL|545454445|5000|HOST CLIENTE|192630172</div>

</div><div>.</div><div>.</div><div>Del cual debo capturar la última sección, es decir, el número que me representa una secuencia (192630167, 192630168, etc).</div><div><br></div><div>Lo hago así:</div><div><br></div><div>

<div>fc = open(&#39;archivo.txt&#39;,&#39;r&#39;)</div><div><br></div><div>for linea in fc:</div><div>    b = linea.rfind(&#39;|&#39;)</div><div>    posi = b + 1</div><div>    posf = posi + 9</div><div>    secuenciac = linea[posi:posf]</div>

<div>    print secuenciac</div></div><div><br></div><div>Esto tarda en promedio 3 minutos (que es demasiado comparado con el tiempo que tarda [1min en promedio] con el script que me pasaron en Perl).</div><div><br></div>
<div>
Ahora, para sumarle al problema del tiempo que tarda dicha proceso, el resultado del ciclo anterior debe escribirse en otro archivo (datos.csv); eso lo hago así:</div><div><br></div><div><div># Abro un archivo para edición</div>

<div>    fdif = open(&#39;datos.csv&#39;,&#39;a&#39;)</div><div>    fdif.writelines(&#39;&quot;&#39;+secuenciac+&#39;&quot;; \n&#39;)</div><div>    fdif.close()</div></div><div><br></div><div>Y esto eleva exponencialmente el tiempo.  :(</div>

<div><br></div><div>Estuve buscando en San Google y en un hilo anterior (así como en e foro de majibu) obtuve documentación donde se habla de lectura de archivos enormes con python usando un mínimo de tiempo:</div><div><br>

</div><div><a href="http://effbot.org/zone/wide-finder.htm">http://effbot.org/zone/wide-finder.htm</a></div><div><br></div><div><pre><span class="n">def</span> <span class="n">process</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">chunk</span><span class="p">):</span>
    <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
    <span class="n">f</span><span class="o">.</span><span class="nb">seek</span><span class="p">(</span><span class="n">chunk</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
    <span class="n">d</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span>
    <span class="k">for</span> <span class="n">page</span> <span class="n">in</span> <span class="n">pat</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="nb">read</span><span class="p">(</span><span class="n">chunk</span><span class="p">[</span><span class="mi">1</span><span class="p">])):</span>
        <span class="n">d</span><span class="p">[</span><span class="n">page</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
    <span class="k">return</span></pre></div><div><br></div><div>Perdón pero no acabo de entender cómo implementar algo que me funcione utilizando el mínimo de tiempo como dicen que sucede por ejemplo con el process anterior.</div>

<div><br></div><div>Se que se puede mejorar dichas situaciones pero lo poco que aún se de Python no me deja ser más eficiente (.. y es que mi ignorancia es infinita)</div><div><br></div><div>Alguien me puede colaborar???</div>

<div><br></div><div><br></div><div>Muchas gracias.<br clear="all"><br></div><div><br></div><div><br>-- <br>Manuel Enrique González Ramírez<br><a href="http://maengora.blogspot.com">http://maengora.blogspot.com</a><br>
</div>