[Python-es] Abrir varios archivos con "open"

Rolando Paz flxpaz en gmail.com
Dom Ene 24 20:23:21 EST 2016


Hola Carlos

Perdona que hasta ahora contesté, pero te agradezco el correo. Me sirvió
mucho para reducir las iteraciones del código y que fuera más resumido.

Muchas gracias de nuevo.


El 13 de enero de 2016, 9:16, Carlos Zuniga <carlos.zun en gmail.com> escribió:

> 2016-01-04 12:31 GMT-05:00 Rolando Paz <flxpaz en gmail.com>:
> > Muchas gracias a todos. Explicare de forma general lo que quiero lograr:
> >
> > Logre graficar los archivos "bram_aa", "bram_cc", "bram_ac_real" y
> > "bram_ac_imag" de la siguiente forma:
> >
> >
> > #ABRO LOS ARCHIVOS
> > bram_aa=open("bram_aa","r")
> > bram_cc=open("bram_cc","r")
> > bram_ac_real=open("bram_ac_real","r")
> > bram_ac_imag=open("bram_ac_imag","r")
> >
> > #USO SOLO LAS COLUMNAS 2 Y 8 DEL ARCHIVO BRAM
> > cols_aa = np.loadtxt(bram_aa, dtype=str, usecols=[2,8])
> > cols_cc = np.loadtxt(bram_cc, dtype=str, usecols=[2,8])
> > cols_ac_real = np.loadtxt(bram_ac_real, dtype=str, usecols=[2,8])
> > cols_ac_imag = np.loadtxt(bram_ac_imag, dtype=str, usecols=[2,8])
> >
> > #DEFINO EN UN PLANO XY, QUIEN ES "X" Y QUIEN ES "Y"
> > x1 = cols_aa[:,0].astype(int)
> > y1 = cols_aa[:,1]
> >
> > x2 = cols_cc[:,0].astype(int)
> > y2 = cols_cc[:,1]
> >
> > x3 = cols_ac_real[:,0].astype(int)
> > y3 = cols_ac_real[:,1]
> >
> > x4 = cols_ac_imag[:,0].astype(int)
> > y4 = cols_ac_imag[:,1]
> >
> > Luego uso plot(x,y) entre otros comandos, para obtener las gráficas.
> >
> > Ahora de acuerdo a las características de mi aplicación, necesito obtener
> > varias veces cada uno de los archivos bram, luego hacer un promedio de
> los
> > datos de los archivos y luego graficar el promedio, es decir que ahora
> tengo
> > los archivos:
> >
> > bram_aa0
> > bram_aa1
> > bram_aa2graficasgraficasgraficas
> > ....etc
> >
> > bram_cc0
> > bram_cc1
> > bram_cc2
> > ....etc
> >
> > bram_ac_real0
> > bram_ac_real1
> > bram_ac_real2
> > ....etc
> >
> > bram_ac_imag0
> > bram_ac_imag1
> > bram_ac_imag2
> > ....etc
> >
> > Para la parte de abrir los archivos, hago esto:
> >
> > bram_aa = []
> > bram_cc = []
> > bram_ac_real = []
> > bram_ac_imag = []
> >
> > #CREANDO UN BUCLE PARA N ARCHIVOS, COMO EJEMPLO SE USO 3 ITERACIONES
> > for i in range(0,3):
> >     bram_aa.append(open("bram_aa%s"%i,"r"))
> >     bram_cc.append(open("bram_cc%s"%i,"r"))
> >     bram_ac_real.append(open("bram_ac_real%s"%i,"r"))
> >     bram_ac_imag.append(open("bram_ac_imag%s"%i,"r"))
> >
> > Ahora entiendo que debo usar otro bucle para que lea las columnas 2 y 8
> de
> > cada bram y luego definir quien es la X y quien es Y, y luego hacer el
> > promedio de todas la columnas para luego graficarlas.
> >
> > Que opinan?
> >
>
> Que en realidad lo que quieres guardar en las listas no son los
> archivos sino las x & y, así que después de abrirlos y sacar los datos
> que necesitas puedes descartarlos. Además el código es más fácil de
> entender si agrupas todos los pasos para cada archivo:
>
>     xy_aa = []
>     xy_cc = []
>
>     for i in range(0, 3):
>         bram_aa = open("bram_aa%s" % i, "r")
>         cols_aa = np.loadtxt(bram_aa, dtype=str, usecols=[2,8])
>         x1 = cols_aa[:,0].astype(int)
>         y1 = cols_aa[:,1]
>         xy_aa.append((x1, y1))
>
>        bram_cc = open("bram_cc%s"%i, "r")
>        cols_cc = np.loadtxt(bram_cc, dtype=str, usecols=[2,8])
>        x2 = cols_cc[:,0].astype(int)
>        y2 = cols_cc[:,1]
>        xy_cc.append((x2, y2))
>
>        bram_ac_real...
>
>     # luego en otro lado
>     for x, y in xy_aa:
>         plot(x, y)
>     for x, y in xy_cc:
>         plot(x, y)
>
>
> Luego podrías darte cuenta que estas repitiendo el mismo código para
> cada archivo que abres, entonces lo separas a una función y la llamas
> en tu bucle para simplificar aun más el código:
>
>
>     def get_xy(filename):
>         bram = open(filename)
>         cols = np.loadtxt(bram, dtype=str, usecols=[2,8])
>         x = cols[:,0].astype(int)
>         y = cols[:,1]
>         return x, y
>
>     xy_aa = []
>     xy_cc = []
>
>     for i in range(0, 3):
>        x1, y1 = get_xy("bram_aa%s" % i, "r")
>        xy_aa.append((x1, y1))
>
>        x2, y2 = get_xy("bram_cc%s" % i, "r")
>        xy_cc.append((x2, y2))
>
>     # luego en otro lado
>     for x, y in xy_aa:
>         plot(x, y)
>     for x, y in xy_cc:
>         plot(x, y)
>
>
> Luego podrías guardar todo en un diccionario en lugar de variables
> individuales (algo como `{"aa": [(x1, y1), (x2, y2)], "bb": [(x2, y2),
> (x3, y3)], etc}`) para hacer un bucle en lugar de escribir cada for
> por separado:
>
>
>     for name, points in mi_dict.items():
>         print "plotting %s" % name
>         for x, y in points:
>             plot(x, y)
>
>
>
> Saludos
>
> --
> A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
> de leer manuales.
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://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/20160124/4eb01e88/attachment.html>


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