[Python-es] Tratar datos txt entre filas

Carlos Agulló Calvo cm.agullo en gmail.com
Jue Ene 17 11:10:16 CET 2013


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.

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

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/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20130117/22caa8e8/attachment.html>


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