> 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 Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/