Matplotlib puede pintar listas de python puro o arrays de numpy, por lo que no es un problema cómo decidas recoger esos datos. On Jan 17, 2013 5:53 PM, "Carlos Agulló Calvo" <cm.agu...@gmail.com> wrote:
> Muchas gracias a todos. > > Como no sé utilizar ninguno de los módulos que habéis dicho los trastearé > un poco a ver cual se adapta mejor a lo que necesito (o yo a él). > > ¿Si utilizara el modulo de CSV o lo hiciera sin módulo podría utilizar > después el Matplotlib? > > Con respecto al código de Jacobo, aún no me he podido poner con ello, pero > en cuanto pueda lo miraré con detalle. > > Un saludo a todos. > > El 17 de enero de 2013 12:20, Jose Luis Dallapiccola > <jlda...@gmail.com>escribió: > >> Hola Carlos, muy buen día. >> >> Otra recomendación sería útilizar el módulo csv para la lectura y >> escritura de los datos, ya que veo que tienen un formato CSV. >> >> Saludos y éxitos! >> >> >> 2013/1/17 Jacobo Tarragón Cros <jacobo.tarra...@gmail.com> >> >>> Hola Carlos, >>> >>> yo definiría los filtros como funciones y los aplicaría uno por uno a >>> los datos en el bucle de lectura. >>> >>> Si necesitas comparar filas arbitrarias, lo más sencillo es guardar los >>> datos leídos en memoria —pero ten en cuenta que esto puede ser un problema >>> si tu conjunto de datos es demasiado grande. Para los casos que citas, sólo >>> sería necesario guardarse la fila nueva y la anterior. >>> >>> def cero_y_cien(nuevos, datos): >>> return not (nuevos[3] == '0' and nuevos[4] == '100') >>> >>> def valor_mayor(nuevos, datos): >>> # compara nuevos con la fila mas reciente de datos >>> return int(nuevos[4]) >= int(datos[-1][4]) >>> >>> datos = [] >>> filtros = (cero_y_cien, valor_mayor) >>> for linea in leer.readlines(): >>> nuevos = linea.strip().split(';') >>> datos.append(nuevos) >>> >>> for fn in filtros: >>> valido = fn(nuevos, datos) >>> >>> Si quieres comparar los datos independientemente —por columnas— lo más >>> conveniente es convertir cada fila en una lista. ¿Qué quieres decir con que >>> te duplica el peso de los archivos? >>> >>> Un método un poco más sofisticado podría ser lanzar excepciones cuando >>> un filtro falla, y recogerlas en el bucle con un try/except: >>> >>> def cero_y_cien(nuevos, datos): >>> if (nuevos[3] == 0 and nuevos[4] == 100): >>> raise ValueError('las columnas 3 y 4 son 0 y 100 >>> respectivamente') >>> >>> Personalmente no usaría numpy para este tratamiento de datos. >>> >>> No he probado el código pero espero que te sirva de orientación. >>> >>> Saludos, >>> Jacobo. >>> >>> El 17 de enero de 2013 11:10, Carlos Agulló Calvo >>> <cm.agu...@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. >>>> >>>> >>>> ¿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 <kikocorre...@gmail.com> escribió: >>>> >>>>> >>>>> >>>>> El 17 de enero de 2013 10:46, Carlos Agulló Calvo <cm.agu...@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@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 mailing list >>> Python-es@python.org >>> http://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >>> >>> >> >> >> -- >> --- >> José Luis DALLAPICCOLA >> Neuquén Capital >> Patagonia Argentina >> >> _______________________________________________ >> 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 mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/