[Python-es] Tratar datos txt entre filas

chakalinux chakalinux en gmail.com
Vie Ene 18 13:21:28 CET 2013


Por que no usas la función *map* ? precisamente hace eso, "compara" 2
listas y retorna según una condición, ejemplo:

def Compara(x, y):
    if x > 100:
        return x

l1 = (1,2,3,4,5,6, 100, 101)
l2 = (1,2,3,0,0,6, 99, 100)

filtro = map(Compara, l1, l2)

print filtro
[None, None, None, None, None, None, None, 101]

Un saludo


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
>
>
> _______________________________________________
> 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/20130118/01bacc62/attachment.html>


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