[Python-es] Tratar datos txt entre filas

Kiko kikocorreoso en gmail.com
Jue Ene 17 11:23:19 CET 2013


El 17 de enero de 2013 11:10, Carlos Agulló Calvo <cm.agullo en gmail.com>escribió:

> Muchas gracias por la respuesta (y por la velocidad en ella)
>
> Aprovecha el for para aplicar tus filtros directamente ahí a medida que
> vas leyendo. Mete un par de ifs para tratar si es el principio o fin del
> fichero para comparar con el dato anterior (en fecha).
>
> Sí, pensaba aprovechar el for para poner los filtros. Lo de los ifs es
> buena idea para saber si es primera o última fila, pero lo que no se es
> comparar entre 2 filas cualquiera (p.ej la fila 11 y la 12).
> Por cierto, ¿es necesario pasar a listas las filas? es que se me duplica
> el peso de los archivos que ya de por si son bastante pesados.
>
>
Las listas y los ficheros son independientes. Las listas van en memoria y
los archivos a disco. No entiendo muy bien lo que quieres decir.


> ¿Te has planteado usar numpy para esto o no es posible y debes usar python
> puro? Numpy te podría facilitar mucho las cosas y librarte de algún for que
> te ralentice el programa.
>
> No he usado nunca numpy, es más, ni siquiera sabía de su existencia. Soy
> bastante novato y el tratamiento de los datos es para un tema de la
> universidad, por lo que puedo usar lo que quiera, sólo que pensé que python
> era lo mejor y por eso me puse a aprenderlo por libre. Me voy a bajar numpy
> y matplotlib porque luego tendré que ponerme a hacer gráficos con los
> resultados.
>

Numpy es python con funcionalidades añadidas. Para las cosas que parece que
estás haciendo te vendría bien aunque se puede hacer sin usar numpy. Para
matplotlib hemos hecho un tutorial de iniciaión aquí:

http://pybonacci.wordpress.com/tag/tutorial-matplotlib-pyplot/ (entradas)
http://pybonacci.files.wordpress.com/2012/08/tutorial-de-matplotlib-pyplotv0-1-201208311.pdf(tutorial
completo en pdf)

Espero te sirva de algo.

Saludos.


> Un saludo
>
> El 17 de enero de 2013 10:56, Kiko <kikocorreoso en gmail.com> escribió:
>
>>
>>
>> El 17 de enero de 2013 10:46, Carlos Agulló Calvo <cm.agullo en gmail.com>escribió:
>>
>> hola
>>>
>>> Hace ya tiempo pregunté varias dudas sobre el tratamiento de datos que
>>> están en un .txt desde entonces, he conseguido varios progresos, pero ahora
>>> me he quedado estancado en un punto del que no se salir.
>>>
>>> Mi duda consiste en lo siguiente:
>>>
>>> tengo los datos de la siguiente manera:
>>>
>>> "0303201";1/4/2009
>>> 0:01:00;2;0;0;0;0;117;44;163;2;0;0;0;-127;2;-127;-127;-127;-127;0
>>> "0303201";1/4/2009
>>> 0:02:00;2;1;0;0;0;104;92;255;1;0;1;1;-127;1;-127;-127;-127;-127;0
>>> (Es un extracto)
>>>
>>> y querría poder compararlos entre las filas para aplicar una serie de
>>> filtros y en función de si cumplen o no los filtros que vayan a archivos
>>> separados.
>>>
>>> He pensado que debería hacer que cada fila fuera una lista y por eso he
>>> hecho este programa:
>>>
>>> leer=open("datos.txt","r")
>>> lista=open("datos_lista.txt","a")
>>> validos=open("est_0303201_VAL.txt","a")
>>> no_validos=open("est_0303201_ERR.txt","a")
>>>
>>> for i in leer.readlines():          #con esto lee cada línea
>>>     datos=i.strip().split(";")      #guarda cada linea como una lista
>>>     lista.write(str(datos)+"\n")  #escribe en VALIDOS (datos_lista.txt)
>>> las lineas como listas [,]
>>>
>>>
>>>
>>> leer.close()
>>> validos.close()
>>>
>>> que me crea 2 archivos vacíos y uno con los datos en forma de listas así:
>>>
>>> ['"0303201"', '1/4/2005 0:01:00', *'2', '0'*, '0', '0', '0', '143',
>>> '-127', '-127', '2', '0', '0', '0', '-127', '2', '-127', '-127', '-127',
>>> '-127', '0']
>>> ['"0303201"', '1/4/2005 0:02:00', *'0', '100'*, '0', '0', '0', '106',
>>> '-127', '-127', '1', '0', '1', '1', '-127', '1', '-127', '-127', '-127',
>>> '-127', '0']
>>> (es un extracto)
>>>
>>> El problema es que no sé cómo poner los filtros.
>>>
>>> Por ejemplo, quiero que si  la columna en negrita 1 es cero y la columna
>>> en negrita 2 es 100 se considere error.
>>>
>>> o que en el siguiente ejemplo:
>>>
>>> ['"0303201"', '1/4/2005 0:01:00', '2', '0', '0', '0', '0', *'143'*,
>>> '-127', '-127', '2', '0', '0', '0', '-127', '2', '-127', '-127', '-127',
>>> '-127', '0']
>>> ['"0303201"', '1/4/2005 0:02:00', '0', '100', '0', '0', '0', *'106'*,
>>> '-127', '-127', '1', '0', '1', '1', '-127', '1', '-127', '-127', '-127',
>>> '-127', '0']
>>> (es un extracto)
>>>
>>> si en la fila 2 la columna en negrita es menor que en la fila 1 también
>>> de error.
>>>
>>> (luego pondría yo que me diga el filtro que no cumple, pero eso creo que
>>> lo sé hacer).
>>>
>>> ¿Podríais ayudarme?
>>>
>>> Muchas gracias
>>>
>>>
>>>
>> Aprovecha el for para aplicar tus filtros directamente ahí a medida que
>> vas leyendo. Mete un par de ifs para tratar si es el principio o fin del
>> fichero para comparar con el dato anterior (en fecha).
>>
>> ¿Te has planteado usar numpy para esto o no es posible y debes usar
>> python puro? Numpy te podría facilitar mucho las cosas y librarte de algún
>> for que te ralentice el programa.
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20130117/7bcab718/attachment.html>


Más información sobre la lista de distribución Python-es