[Python-es] Funciones matemáticas

2011-06-02 Por tema Douglas Jiménez
¡Hola!

¿Dónde puedo conseguir la lista completa de las funciones matemáticas
incorporadas en el módulo math?

Gracias.

Douglas.
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Funciones matemáticas

2011-06-02 Por tema Kiko
El 2 de junio de 2011 13:55, Douglas Jiménez doug...@gmail.com escribió:

 ¡Hola!

 ¿Dónde puedo conseguir la lista completa de las funciones matemáticas
 incorporadas en el módulo math?

 Gracias.


 import math
 help(math)


 Douglas.

 ___
 Python-es mailing list
 Python-es@python.org
 http://mail.python.org/mailman/listinfo/python-es
 FAQ: http://python-es-faq.wikidot.com/


___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


[Python-es] Buscar, leer y escribir archivos grandes con Python

2011-06-02 Por tema Manuel Enrique González Ramírez
Hola a tod@s,

Tengo la siguiente situación:

Un archivo de 29Mb que contiene 281.351 lineas.  El archivo tiene la
siguiente estructura:

1|2011-05-20 23:08:56|122711527|OPERADOR1|HOST TO HOST|212454|1|HOST
CLIENTE|192630167
2|2011-05-20 23:09:08|122711530|OPERADOR12|HOST TO
HOST|57212454|1000|HOST CLIENTE|192630168
3|2011-05-20 23:09:42|122711538|OPERADOR1|HOST TO
HOST|454545454545|2000|HOST CLIENTE|192630169
4|2011-05-20 23:10:03|122711544|OPERADOR1|HOST TO
HOST|121221211|2|HOST CLIENTE|192630170
5|2011-05-20 23:10:09|122711547|OPERADOR1|HOST TO HOST
ESPECIAL|4545|5000|HOST CLIENTE|192630171
6|2011-05-20 23:10:46|122711554|OPERADOR1|HOST TO HOST
ESPECIAL|545454445|5000|HOST CLIENTE|192630172
.
.
Del cual debo capturar la última sección, es decir, el número que me
representa una secuencia (192630167, 192630168, etc).

Lo hago así:

fc = open('archivo.txt','r')

for linea in fc:
b = linea.rfind('|')
posi = b + 1
posf = posi + 9
secuenciac = linea[posi:posf]
print secuenciac

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).

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í:

# Abro un archivo para edición
fdif = open('datos.csv','a')
fdif.writelines(''+secuenciac+'; \n')
fdif.close()

Y esto eleva exponencialmente el tiempo.  :(

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:

http://effbot.org/zone/wide-finder.htm

def process(file, chunk):
f = open(file)
f.seek(chunk[0])
d = defaultdict(int)
for page in pat.findall(f.read(chunk[1])):
d[page] += 1
return


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.

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)

Alguien me puede colaborar???


Muchas gracias.



-- 
Manuel Enrique González Ramírez
http://maengora.blogspot.com
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Buscar, leer y escribir archivos grandes con Python

2011-06-02 Por tema Jose Caballero



 fc = open('archivo.txt','r')

 for linea in fc:
 b = linea.rfind('|')
 posi = b + 1
 posf = posi + 9
 secuenciac = linea[posi:posf]
 print secuenciac





Has probado

fc = open(.)
for linea in fc:
secuenciac = linea.split('|')[-1]

?
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Buscar, leer y escribir archivos grandes con Python

2011-06-02 Por tema joe di castro
Mejor aún, kiko:

with open(archivo.txt, r) as entrada:
with open(salida.txt, w) as salida:
for linea in entrada:
salida.write( + linea.split('|')[-1] + ;\n)

Saludos


El jue, 02-06-2011 a las 23:45 +0200, Kiko escribió:
 
 
 2011/6/2 Jose Caballero jcaballero@gmail.com
 
 
 
 fc = open('archivo.txt','r')
 
 
 for linea in fc:
 b = linea.rfind('|')
 posi = b + 1
 posf = posi + 9
 secuenciac = linea[posi:posf]
 print secuenciac
 
 
 
 
 
 
 Has probado 
 
 fc = open(.)
 for linea in fc:
 secuenciac = linea.split('|')[-1]
 
 
  
 Yo abro todos los días ficheros de ese pelo y no me tarda tanto.
 Prueba lo siguiente y dime a ver si te funciona:
 
 
 ficheroentrada = open('archivo.txt','r')
 ficherosalida = open('salida.txt','w')
 for linea in ficheroentrada:
 ficherosalida.write( + linea.split('|')[-1] + ;\n)
 ficheroentrada.close()
 ficherosalida.close()
 
 
 ___
 Python-es mailing list
 Python-es@python.org
 http://mail.python.org/mailman/listinfo/python-es
 FAQ: http://python-es-faq.wikidot.com/


___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Buscar, leer y escribir archivos grandes con Python

2011-06-02 Por tema lasizoillo
El día 2 de junio de 2011 23:32, Manuel Enrique González Ramírez
maeng...@gmail.com escribió:
 Hola a tod@s,
 Tengo la siguiente situación:
 Un archivo de 29Mb que contiene 281.351 lineas.  El archivo tiene la
 siguiente estructura:
 1|2011-05-20 23:08:56|122711527|OPERADOR1|HOST TO HOST|212454|1|HOST
 CLIENTE|192630167
 2|2011-05-20 23:09:08|122711530|OPERADOR12|HOST TO
 HOST|57212454|1000|HOST CLIENTE|192630168
 3|2011-05-20 23:09:42|122711538|OPERADOR1|HOST TO
 HOST|454545454545|2000|HOST CLIENTE|192630169
 4|2011-05-20 23:10:03|122711544|OPERADOR1|HOST TO
 HOST|121221211|2|HOST CLIENTE|192630170
 5|2011-05-20 23:10:09|122711547|OPERADOR1|HOST TO HOST
 ESPECIAL|4545|5000|HOST CLIENTE|192630171
 6|2011-05-20 23:10:46|122711554|OPERADOR1|HOST TO HOST
 ESPECIAL|545454445|5000|HOST CLIENTE|192630172
 .
 .
 Del cual debo capturar la última sección, es decir, el número que me
 representa una secuencia (192630167, 192630168, etc).
 Lo hago así:
 fc = open('archivo.txt','r')
 for linea in fc:
     b = linea.rfind('|')
     posi = b + 1
     posf = posi + 9
     secuenciac = linea[posi:posf]
     print secuenciac

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|1|HOST CLIENTE|192630167

In [10]: timeit linea.split('|')[-1]
100 loops, best of 3: 1.2 us per loop

In [11]: timeit linea.rsplit('|',1)[-1]
100 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. Para un profiling mejor busca por san google temas de
python profiling e incluso python profiling kcachegrind. Lo suyo para
optimizar es poder medir en que estas gastando el tiempo ;-)

 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).
 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í:
 # Abro un archivo para edición
     fdif = open('datos.csv','a')
     fdif.writelines(''+secuenciac+'; \n')
     fdif.close()
 Y esto eleva exponencialmente el tiempo.  :(

No alcanzo a entender el uso de writelines:
http://docs.python.org/library/stdtypes.html#file.writelines

Supongo que no abres y cierras el fichero cada vez, pero tengo que
preguntarlo, ¿lo haces? Si lo estás haciendo, un profiler gritaría que
ese es el primer punto a optimizar.

 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:
 http://effbot.org/zone/wide-finder.htm

 def process(file, chunk):
 f = open(file)
 f.seek(chunk[0])
 d = defaultdict(int)
 for page in pat.findall(f.read(chunk[1])):
 d[page] += 1
 return

 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.
 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)
 Alguien me puede colaborar???


Creo que lo mejor es olvidarse un poco de conseguir la solución más
eficiente por ahora. Primero juega con python y cuando tengas soltura
irás haciendo el código más óptimo de forma fácil. Por ejemplo, la
optimización del rsplit no se me hubiera podido ocurrir sin conocer la
existencia del rsplit. Para saber por qué va más rápido hay que pensar
en la cantidad de objetos a crear/destruir en una y otra solución,
aparte de que una requiere un recorrido mayor de la cadena que la
otra.

Espero que el correo te haya resultado útil.

Un saludo:

Javi
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/