> Supongo que esto es muy lento y que con el split habrás notado una
> buena mejoría. Pero todavía se puede hacer mejor, rsplit es lo suyo:
>
> In [9]: linea = "1|2011-05-20 23:08:56|122711527|OPERADOR1|HOST TO
> HOST|212454|10000|HOST CLIENTE|192630167"
>
> In [10]: timeit linea.split('|')[-1]
> 1000000 loops, best of 3: 1.2 us per loop
>
> In [11]: timeit linea.rsplit('|',1)[-1]
> 1000000 loops, best of 3: 695 ns per loop
>
> In [12]: linea.rsplit('|',1)[-1]
> Out[12]: '192630167'
>
> Para hacer esos mini-benchmarks tan chulos, se puede hacer facilmente
> con ipython.
>
Usando ipython defino tres funciones:
def abrekiko(entrada, salida):
input = open(entrada, 'r')
output = open(salida, 'w')
for l in input:
output.write(l.split(',')[-1])
input.close()
output.close()
def abrejoe(entrada,salida):
with open(entrada,'r') as input:
with open(salida,'w') as output:
[output.write(l.split(',')[-1]) for l in input]
def abrelasi(entrada,salida):
with open(entrada,'r') as input:
with open(salida,'w') as output:
[output.write(l.rsplit(',',1)[-1]) for l in input]
Los resultados que me salen son:
In [15]: timeit abrekiko(entrada,salida)
1 loops, best of 3: 735 ms per loop
In [16]: timeit abrejoe(entrada,salida)
1 loops, best of 3: 766 ms per loop
In [17]: timeit abrelasi(entrada,salida)
1 loops, best of 3: 563 ms per loop
Mi entrada es un fichero con 300.000 líneas y 8 columnas separadas por coma.
Claramente, rsplit parece que funciona mejor. He hecho mi función (abrekiko)
con una list comprehesion y también va un poquito más lenta que con el for a
pelo y tenía entendido que usar list comprehensions era más efectivo.
¿La diferencia de rsplit con respecto a split es solo que empieza el split
por la derecha?
¿Alguien tiene formas más rápidas de lectura de ficheros de texto?
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/