Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/01/2014, 03:01
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
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].