Foros del Web » Programando para Internet » Python »

Dudas sobre leer varios conjuntos de archivos en python

Estas en el tema de Dudas sobre leer varios conjuntos de archivos en python en el foro de Python en Foros del Web. Hola, consulto si me podrian ayudar en esto. Tengo este codigo en python que recoge datos de unos archivos txt, los convierte en arreglos y ...
  #1 (permalink)  
Antiguo 11/01/2014, 20:42
 
Fecha de Ingreso: enero-2014
Mensajes: 1
Antigüedad: 4 años, 4 meses
Puntos: 0
Dudas sobre leer varios conjuntos de archivos en python

Hola, consulto si me podrian ayudar en esto.

Tengo este codigo en python que recoge datos de unos archivos txt, los convierte en arreglos y grafica.
Pero no se como hacerlo para que haga esto mismo pero uno pueda especificar una cantidad de archivos dinamicos, no 4 siempre, pero para eso necesito escribir el codigo una sola vez, no por archivo hacer lo mismo.

aqui va el codigo.

Código Python:
Ver original
  1. import numpy as np
  2. import matplotlib.mlab as mlab
  3. import matplotlib.pyplot as plt
  4. import math
  5. import random
  6. #import scipy.stats as st
  7.  
  8. file0 = open("valores_teoricos.txt","r")
  9. file1 = open("log_1.txt","r")
  10. file2 = open("log_2.txt","r")
  11. file3 = open("log_3.txt","r")
  12. file4 = open("log_4.txt","r")
  13.  
  14. f0_dat = file0.readlines()
  15. datos_f0 = []
  16. for i in f0_dat:
  17.     a = i.split(',')
  18.     del a[-1]
  19.     a = map(float, a)
  20.     datos_f0.append(a)
  21.  
  22. f1_dat = file1.readlines()
  23. datos_f1 = []
  24. for i in f1_dat:
  25.     a = i.split(',')
  26.     del a[-1]
  27.     a = map(float, a)
  28.     datos_f1.append(a)
  29.  
  30. f2_dat = file2.readlines()
  31. datos_f2 = []
  32. for i in f2_dat:
  33.     a = i.split(',')
  34.     del a[-1]
  35.     a = map(float, a)
  36.     datos_f2.append(a)
  37.  
  38. f3_dat = file3.readlines()
  39. datos_f3 = []
  40. for i in f3_dat:
  41.     a = i.split(',')
  42.     del a[-1]
  43.     a = map(float, a)
  44.     datos_f3.append(a)
  45.  
  46. f4_dat = file4.readlines()
  47. datos_f4 = []
  48. for i in f4_dat:
  49.     a = i.split(',')
  50.     del a[-1]
  51.     a = map(float, a)
  52.     datos_f4.append(a)
  53.  
  54. t = [] #tiempo
  55.  
  56. x1 = [] #lista tiempo
  57. y1 = [] #largo cola
  58. n1 = [] #cantidad procesados
  59. f1 = [] #fila media entre mediciones (Lq)
  60. r1 = [] #numero medio clientes en servicio (Ls)
  61. e1 = [] #espera fila (wq)
  62. a1 = [] #tiempo atencion en servidor (ws)
  63. o1 = [] #ocupacion media servidores
  64. l1 = [] #numero medio clientes en sistema (L)
  65.  
  66. x2 = []
  67. y2 = []
  68. n2 = []
  69. f2 = []
  70. r2 = []
  71. e2 = []
  72. a2 = []
  73. o2 = []
  74. l2 = []
  75.  
  76. x3 = []
  77. y3 = []
  78. n3 = []
  79. f3 = []
  80. r3 = []
  81. e3 = []
  82. a3 = []
  83. o3 = []
  84. l3 = []
  85.  
  86. x4 = []
  87. y4 = []
  88. n4 = []
  89. f4 = []
  90. r4 = []
  91. e4 = []
  92. a4 = []
  93. o4 = []
  94. l4 = []
  95.  
  96. y_t = []
  97. f_t = []
  98. r_t = []
  99. e_t = []
  100. a_t = []
  101. l_t = []
  102.  
  103. x1_prom = []
  104. y1_prom = []
  105. n1_prom = []
  106. f1_prom = []
  107. r1_prom = []
  108. e1_prom = []
  109. a1_prom = []
  110. o1_prom = []
  111. l1_prom = []
  112.  
  113. x2_prom = []
  114. y2_prom = []
  115. n2_prom = []
  116. f2_prom = []
  117. r2_prom = []
  118. e2_prom = []
  119. a2_prom = []
  120. o2_prom = []
  121. l2_prom = []
  122.  
  123. x3_prom = []
  124. y3_prom = []
  125. n3_prom = []
  126. f3_prom = []
  127. r3_prom = []
  128. e3_prom = []
  129. a3_prom = []
  130. o3_prom = []
  131. l3_prom = []
  132.  
  133. x4_prom = []
  134. y4_prom = []
  135. n4_prom = []
  136. f4_prom = []
  137. r4_prom = []
  138. e4_prom = []
  139. a4_prom = []
  140. o4_prom = []
  141. l4_prom = []
  142.  
  143. y_prom_total = []
  144. f_prom_total = []
  145. r_prom_total = []
  146. e_prom_total = []
  147. a_prom_total = []
  148. l_prom_total = []
  149.  
  150. y_desv = []
  151. f_desv = []
  152. r_desv = []
  153. e_desv = []
  154. a_desv = []
  155. l_desv = []
  156.  
  157. lamda = datos_f0[0][1]
  158. mu = datos_f0[0][2]
  159. rho = datos_f0[0][3]
  160. wq = datos_f0[0][4]
  161. ws = datos_f0[0][5]
  162. Lq = datos_f0[0][6]
  163. Ls = datos_f0[0][7]
  164. max_tiempo = min(datos_f1[-1][1],datos_f2[-1][1],datos_f3[-1][1],datos_f4[-1][1])
  165. ventana = 10 # ventana de 10 unidades de tiempo
  166. t = range(0, int(math.floor(max_tiempo)), ventana)
  167.  
  168.  
  169. for j in range(len(datos_f1)):
  170.     x1.append(datos_f1[j][1])
  171.     y1.append(datos_f1[j][2])
  172.     n1.append(datos_f1[j][0])
  173.     a1.append(datos_f1[j][5])
  174.     e1.append(datos_f1[j][4])
  175.     f1.append(datos_f1[j][6])
  176.     r1.append(datos_f1[j][7])
  177.     l1.append(datos_f1[j][6]+datos_f1[j][7])
  178.  
  179. for j in range(len(datos_f2)):
  180.     x2.append(datos_f2[j][1])
  181.     y2.append(datos_f2[j][2])
  182.     n2.append(datos_f2[j][0])
  183.     a2.append(datos_f2[j][5])
  184.     e2.append(datos_f2[j][4])
  185.     f2.append(datos_f2[j][6])
  186.     r2.append(datos_f2[j][7])
  187.     l2.append(datos_f2[j][6]+datos_f2[j][7])
  188. for j in range(len(datos_f3)):
  189.     x3.append(datos_f3[j][1])
  190.     y3.append(datos_f3[j][2])
  191.     n3.append(datos_f3[j][0])
  192.     a3.append(datos_f3[j][5])
  193.     e3.append(datos_f3[j][4])
  194.     f3.append(datos_f3[j][6])
  195.     r3.append(datos_f3[j][7])
  196.     l3.append(datos_f3[j][6]+datos_f3[j][7])
  197.  
  198. for j in range(len(datos_f4)):
  199.     x4.append(datos_f4[j][1])
  200.     y4.append(datos_f4[j][2])
  201.     n4.append(datos_f4[j][0])
  202.     a4.append(datos_f4[j][5])
  203.     e4.append(datos_f4[j][4])
  204.     f4.append(datos_f4[j][6])
  205.     r4.append(datos_f4[j][7])
  206.     l4.append(datos_f4[j][6]+datos_f4[j][7])
  207. j=0
  208. for i in range(len(y1)):
  209.     if j == len(t)-1: # para que no intente acceder a t[len(t)] que no existe
  210.         break
  211.     if x1[i] < t[j+1]:
  212.         y_t.append(y1[i])
  213.         f_t.append(f1[i])
  214.         r_t.append(r1[i])
  215.         e_t.append(e1[i])
  216.         a_t.append(a1[i])
  217.         l_t.append(l1[i])
  218.     else:
  219.         y1_prom.append(np.mean(y_t))
  220.         f1_prom.append(np.mean(f_t))
  221.         r1_prom.append(np.mean(r_t))
  222.         e1_prom.append(np.mean(e_t))
  223.         a1_prom.append(np.mean(a_t))
  224.         l1_prom.append(np.mean(l_t))
  225.         j=j+1
  226.         del y_t[:]
  227.         del f_t[:]
  228.         del r_t[:]
  229.         del e_t[:]
  230.         del a_t[:]
  231.         del l_t[:]
  232.         y_t.append(y1[i])
  233.         f_t.append(f1[i])
  234.         r_t.append(r1[i])
  235.         e_t.append(e1[i])
  236.         a_t.append(a1[i])
  237.         l_t.append(l1[i])
  238.  
  239. del y_t[:]
  240. del f_t[:]
  241. del r_t[:]
  242. del e_t[:]
  243. del a_t[:]
  244. del l_t[:]
  245. j=0
  246. for i in range(len(y2)):
  247.     if j == len(t)-1:
  248.         break
  249.     if x2[i] < t[j+1]:
  250.         y_t.append(y2[i])
  251.         f_t.append(f2[i])
  252.         r_t.append(r2[i])
  253.         e_t.append(e2[i])
  254.         a_t.append(a2[i])
  255.         l_t.append(l2[i])
  256.     else:
  257.         y2_prom.append(np.mean(y_t))
  258.         f2_prom.append(np.mean(f_t))
  259.         r2_prom.append(np.mean(r_t))
  260.         e2_prom.append(np.mean(e_t))
  261.         a2_prom.append(np.mean(a_t))
  262.         l2_prom.append(np.mean(l_t))
  263.         j=j+1
  264.         del y_t[:]
  265.         del f_t[:]
  266.         del r_t[:]
  267.         del e_t[:]
  268.         del a_t[:]
  269.         del l_t[:]
  270.         y_t.append(y2[i])
  271.         f_t.append(f2[i])
  272.         r_t.append(r2[i])
  273.         e_t.append(e2[i])
  274.         a_t.append(a2[i])
  275.         l_t.append(l2[i])
  276.  
  277. del y_t[:]
  278. del f_t[:]
  279. del r_t[:]
  280. del e_t[:]
  281. del a_t[:]
  282. del l_t[:]
  283. j=0
  284. for i in range(len(y3)):
  285.     if j == len(t)-1:
  286.         break
  287.     if x3[i] < t[j+1]:
  288.         y_t.append(y3[i])
  289.         f_t.append(f3[i])
  290.         r_t.append(r3[i])
  291.         e_t.append(e3[i])
  292.         a_t.append(a3[i])
  293.         l_t.append(l3[i])
  294.     else:
  295.         y3_prom.append(np.mean(y_t))
  296.         f3_prom.append(np.mean(f_t))
  297.         r3_prom.append(np.mean(r_t))
  298.         e3_prom.append(np.mean(e_t))
  299.         a3_prom.append(np.mean(a_t))
  300.         l3_prom.append(np.mean(l_t))
  301.         j=j+1
  302.         del y_t[:]
  303.         del f_t[:]
  304.         del r_t[:]
  305.         del e_t[:]
  306.         del a_t[:]
  307.         del l_t[:]
  308.         y_t.append(y3[i])
  309.         f_t.append(f3[i])
  310.         r_t.append(r3[i])
  311.         e_t.append(e3[i])
  312.         a_t.append(a3[i])
  313.         l_t.append(l3[i])
  314.  
  315. del y_t[:]
  316. del f_t[:]
  317. del r_t[:]
  318. del e_t[:]
  319. del a_t[:]
  320. del l_t[:]
  321. j=0
  322. for i in range(len(y4)):
  323.     if j == len(t)-1:
  324.         break
  325.     if x4[i] < t[j+1]:
  326.         y_t.append(y4[i])
  327.         f_t.append(f4[i])
  328.         r_t.append(r4[i])
  329.         e_t.append(e4[i])
  330.         a_t.append(a4[i])
  331.         l_t.append(l4[i])
  332.     else:
  333.         y4_prom.append(np.mean(y_t))
  334.         f4_prom.append(np.mean(f_t))
  335.         r4_prom.append(np.mean(r_t))
  336.         e4_prom.append(np.mean(e_t))
  337.         a4_prom.append(np.mean(a_t))
  338.         l4_prom.append(np.mean(l_t))
  339.         j=j+1
  340.         del y_t[:]
  341.         del f_t[:]
  342.         del r_t[:]
  343.         del e_t[:]
  344.         del a_t[:]
  345.         del l_t[:]
  346.         y_t.append(y4[i])
  347.         f_t.append(f4[i])
  348.         r_t.append(r4[i])
  349.         e_t.append(e4[i])
  350.         a_t.append(a4[i])
  351.         l_t.append(l4[i])
  352.  
  353. for k in range(len(y1_prom)):
  354.     y_prom_total.append(np.mean([y1_prom[k], y2_prom[k], y3_prom[k], y4_prom[k]]))
  355.     f_prom_total.append(np.mean([f1_prom[k], f2_prom[k], f3_prom[k], f4_prom[k]]))
  356.     r_prom_total.append(np.mean([r1_prom[k], r2_prom[k], r3_prom[k], r4_prom[k]]))
  357.     e_prom_total.append(np.mean([e1_prom[k], e2_prom[k], e3_prom[k], e4_prom[k]]))
  358.     a_prom_total.append(np.mean([a1_prom[k], a2_prom[k], a3_prom[k], a4_prom[k]]))
  359.     l_prom_total.append(np.mean([l1_prom[k], l2_prom[k], l3_prom[k], l4_prom[k]]))
  360.  
  361.  
  362. del t[-1] # hacer que len(t)==len(_prom_total) para poder graficar
  363.  
  364. line, = plt.plot(t, y_prom_total, 'g-', linewidth=1)
  365. plt.xlabel('Tiempo')
  366. plt.ylabel('Largo fila')
  367. plt.title(r'Evolucion temporal del largo de la fila con $\lambda={}$, $\mu={}$')
  368. plt.figure()
  369.  
  370. line, = plt.plot(t, f_prom_total, 'g-', linewidth=1)
  371. plt.plot(t, [Lq] * len(t), 'r--')
  372. plt.xlabel('Tiempo')
  373. plt.ylabel('Largo fila promedio')
  374. plt.title(r'Largo promedio de la fila por unidad de tiempo (Lq) con $\lambda={}$, $\mu={}$')
  375. plt.figure()
  376.  
  377. line, = plt.plot(t, l_prom_total, 'g-', linewidth=1)
  378. plt.plot(t, [(Lq+Ls)] * len(t), 'r--')
  379. plt.xlabel('Tiempo')
  380. plt.ylabel('Clientes')
  381. plt.title(r'Numero medio de clientes en el sistema (L) con $\lambda={}$, $\mu={}$')
  382. plt.figure()
  383.  
  384. line, = plt.plot(t, a_prom_total, 'g-', linewidth=1)
  385. plt.plot(t, [ws] * len(t), 'r--')
  386. plt.xlabel('Tiempo')
  387. plt.ylabel('Tiempo atencion')
  388. plt.title(r'Tiempo medio de atencion de un cliente en servidor (ws) con $\lambda={}$, $\mu={}$')
  389. plt.figure()
  390.  
  391. line, = plt.plot(t, r_prom_total, 'g-', linewidth=1)
  392. plt.plot(t, [Ls] * len(t), 'r--')
  393. plt.xlabel('Tiempo')
  394. plt.ylabel('Clientes')
  395. plt.title(r'Numero medio de clientes en atencion (Ls) con $\lambda={}$, $\mu={}$')
  396. plt.figure()
  397.  
  398. #line, = plt.plot(x, o, '-', linewidth=1)
  399. #plt.xlabel('Tiempo')
  400. #plt.ylabel('% ocupacion')
  401. #plt.title(r'Ocupacion media de los servidores')
  402. #plt.figure()
  403.  
  404. line, = plt.plot(t, e_prom_total, 'g-', linewidth=1)
  405. plt.plot(t, [wq] * len(t), 'r--')
  406. plt.xlabel('Tiempo')
  407. plt.ylabel('Tiempo espera en fila')
  408. plt.title(r'Tiempo de espera en la fila para cada llegada (wq) con $\lambda={}$, $\mu={}$')
  409. #plt.figure()
  410.  
  411. plt.show()
  412.  
  413. file0.close()
  414. file1.close()
  415. file2.close()
  416. file3.close()
  417. file4.close()

Saludos.

Última edición por razpeitia; 11/01/2014 a las 20:49
  #2 (permalink)  
Antiguo 11/01/2014, 21:04
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 9.993
Antigüedad: 10 años, 2 meses
Puntos: 1318
Respuesta: Dudas sobre leer varios conjuntos de archivos en python

Muchacho ¿has oído de las funciones?
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 12/01/2014, 02:01
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 13 años, 2 meses
Puntos: 1360
Respuesta: Dudas sobre leer varios conjuntos de archivos en python

Como ya te dijeron usa funciones, es genial para mantener el código modularizado.

Toma como ejemplo este bloque de código.
Código Python:
Ver original
  1. file1 = open("log_1.txt","r")
  2. file2 = open("log_2.txt","r")
  3. file3 = open("log_3.txt","r")
  4. file4 = open("log_4.txt","r")
  5.  
  6. datos_f0 = []
  7. for i in f0_dat:
  8.     a = i.split(',')
  9.     del a[-1]
  10.     a = map(float, a)
  11.     datos_f0.append(a)
  12.  
  13. f1_dat = file1.readlines()
  14. datos_f1 = []
  15. for i in f1_dat:
  16.     a = i.split(',')
  17.     del a[-1]
  18.     a = map(float, a)
  19.     datos_f1.append(a)
  20.  
  21. f2_dat = file2.readlines()
  22. datos_f2 = []
  23. for i in f2_dat:
  24.     a = i.split(',')
  25.     del a[-1]
  26.     a = map(float, a)
  27.     datos_f2.append(a)
  28.  
  29. f3_dat = file3.readlines()
  30. datos_f3 = []
  31. for i in f3_dat:
  32.     a = i.split(',')
  33.     del a[-1]
  34.     a = map(float, a)
  35.     datos_f3.append(a)
  36.  
  37. f4_dat = file4.readlines()
  38. datos_f4 = []
  39. for i in f4_dat:
  40.     a = i.split(',')
  41.     del a[-1]
  42.     a = map(float, a)
  43.     datos_f4.append(a)
43 lineas de código (y no añadí el close de los archivos) y un momento, ese código esta repetido muchas veces. Si quisiera un quinto archivo tendrías que copiar y pegar otro bloque de código o peor aun si quieres modificar algo, tienes que hacerlo 4 veces y la probabilidad de que te equivoques en editar un bloque es alto.

Usando funciones, podemos hacer eso en pocas lineas.
Código Python:
Ver original
  1. def load_data(filename):
  2.     data = []
  3.     with open(filename, 'r') as f:
  4.         for i n f:
  5.             a = map(float, i.split(',')[:-1])
  6.             data.append(a)
  7.     return data
  8.  
  9. files = ["log_1.txt", "log_2.txt", "log_3.txt", "log_4.txt"]
  10. datos = [load_data(f) for f in files]
Nota que son menos lineas, si quiero un quinto archivo solo agrego otro archivo a lista de archivos. Si quisiera modificar algo, lo haría en una sola función y no en varias partes del código. Fijate que tampoco enumero mis variables como dato1, dato2, etc... Si no creo una lista así, si quiero el primer dato solo accedo a el como un arreglo dato[0].

Etiquetas: dudas, ip, sistema
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:16.