Estimados:
Parto contándoles que soy totalmente noob en Python, de hecho mi única experiencia como programado son algunas macros en VBA.
Querio leer datos de clientes de un archivo llamado "datos.dem" y para ello me hice una clase Cliente que es mas menos así:
Clientes[]
dic_Clientes{}
class Cliente:
def __init__(self,nombre,suministrador="", tipo="", demanda_cliente=[],barra="",curva= 0):
self.nombre = nombre
self.suministrador = suministrador
self.demanda_cliente = demanda_cliente
self.barra = barra
self.curva = curva
self.tipo = tipo
dic_Clientes[nombre] = len(Clientes) # Diccionario con nombre de cliente como clave y con indice Clientes[] como valor
Clientes.append(self)
def __str__(self):
return self.nombre
def agrega_lineademanda(self,ano,mes,suministrador,pot_media,f_carga):
indice = len(self.demanda_cliente)
self.demanda_cliente.append([0,0,"",0,0,0])
self.demanda_cliente[indice][0] = ano
self.demanda_cliente[indice][1] = mes
self.demanda_cliente[indice][2] = suministrador
self.demanda_cliente[indice][3] = pot_media
self.demanda_cliente[indice][4] = f_carga
indice_curva = dic_Curvas[str(self.curva)]
indice_mes = mes - 1
hora_b1 = float(Hora_Bloques[indice_mes][0])
hora_b2 = float(Hora_Bloques[indice_mes][1])
hora_b3 = float(Hora_Bloques[indice_mes][2])
hora_b4 = float(Hora_Bloques[indice_mes][3])
curva_b1 = float(Curvas[indice_curva].Bloque1[indice_mes])
curva_b2 = float(Curvas[indice_curva].Bloque2[indice_mes])
curva_b3 = float(Curvas[indice_curva].Bloque3[indice_mes])
curva_b4 = float(Curvas[indice_curva].Bloque4[indice_mes])
demandames = float(pot_media)/float(f_carga)*(curva_b1*hora_b1+curva_b2*hora_b2+curva_b3*hora_b3+curva_b4*hora_b4)
self.demanda_cliente[indice][5] = demandames
Luego hice una función para obtener los clientes desde un archivo, la función es más menos así (Las curvas y las horas_bloques están bien definidas en otras listas y diccionarios):
def ObtenerClientes():
ObtenerCurvas()
f_clientes = open("datos.dem","r")
while 1:
s = f_clientes.readline()
if s == "":
f_clientes.close()
return
if s == "\n": continue
s_clientes = s.strip()
split_clientes = s_clientes.split()
if split_clientes[0] == "consfut": #Linea que marca la introducción de consumos
while 1:
s2 = f_clientes.readline()
s2_c = s2.strip()
if s2 == "find" or s2 == "":
f_clientes.close()
return
if s2 == '\n': continue
split_s2 = s2_c.split()
if split_s2[0] == "/*" or split_s2[0] == "consumo" : continue #Si es comentario continuo
if split_s2[0] == "find":
f_clientes.close()
return
cliente = split_s2[0]
ano = int(split_s2[1])
mes = int(split_s2[2])
pot_media = float(split_s2[5])
f_carga = float(split_s2[6])
curva = int(split_s2[7])
barra = split_s2[10]
suministrador = split_s2[11]
tipo = split_s2[19]
if not dic_Clientes.has_key(cliente):
O_cliente = Cliente(cliente)
O_cliente.tipo = tipo
O_cliente.barra = barra
O_cliente.curva = curva
O_cliente.agrega_lineademanda(ano,mes,suministrador,pot_media,f_carga)
elif dic_Clientes.has_key(cliente):
indice_Clientes = dic_Clientes[cliente]
O_cliente = Clientes[indice_Clientes]
O_cliente.agrega_lineademanda(ano,mes,suministrador,pot_media,f_carga)
El problema es que al consultar por ejemplo la demanda de 1 Cliente
demanda_cliente = Clientes[0].demanda_cliente
resulta que esta demanda guarda las filas de demanda de todos los clientes... no entiendo cual puede ser el error si aplico el método sobre el objeto O_cliente.agrega_lineademanda(......) y O_cliente lo estoy cambiando cada vez.
Espero me puedan ayudar.