Python - Crear múltiples instancias de un objeto y guardarlas en lista

 
Vista:

Crear múltiples instancias de un objeto y guardarlas en lista

Publicado por Manuel (3 intervenciones) el 18/05/2012 11:51:35
Hola a todos:

Tengo un txt que es un listado de ficheros de una carpeta, al haber hecho en la consola de windows "dir /s /n >listado.txt"

Pues bien, quiero analizar su contenido con un programa en python y quiero almacenar el nombre de la carpeta y el tipo de fichero. Para eso, uso el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Fichero:
    Nombre=""
    Tipo=""
 
    def __init__(self):
        self.Nombre=""
        self.Tipo=0
 
 
listaFicheros=[]
auxiliar = Fichero()
 
try:
    linea = entrada.readline()
 
    while linea:
 
        #Recuperamos el nombre de la carpeta
        nombre = linea[:linea.find('\\')]
 
 
        #Comprobamos si se trata de una carpeta nueva o de una que ya estabamos
        #analizando.
        if auxiliar.Nombre != nombre:
            # Si es proyecto nuevo lo primero que hacemos
            # es guardar la informaci?n del anterior
            listaProyectos.append(auxiliar)
            auxiliar.Nombre=nombre
 
 
 
        linea = entrada.readline()
 
 
    for proyecto in listaProyectos:
        salida.write(proyecto.Nombre+'\n')
 
 
except:
    print "Error leyendo/escribiendo los resultados"



El problema es que al escribir la salida, siempre me sale el mismo valor, el cual es el ÚLTIMO QUE INTRODUZCO. Es decir, estoy machacando siempre la misma posición de memoria.

Yo lo que quiero es crear nuevos objetos, para poder almacenar valores en la lista.

Llevo hora y media googleando y no consigo dar con los términos de búsqueda que me permitan encontrar la solución. ¿Me podéis echar una mano? Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Crear múltiples instancias de un objeto y guardarlas en lista

Publicado por xve (1646 intervenciones) el 18/05/2012 23:15:56
Hola Manuel, estoy revisando tu código, y hay cosas que no se entender... por ejemplo, no se que contenido tiene la variable entrada, pero por lo que veo, tiene el listado de archivos, no?
Si es así, con la instrucción: linea = entrada.readline() coges la linea, y después haces un bucle mientas exista linea... yo te recomendaría hacerlo así:
1
for linea in entrada.readline():


Sobre el problema que comentas, y tal y como veo el código me da la sensación, que únicamente guardas el apuntados a la clase Fichero, pero ese apuntador siempre es el mismo... no se entender muy bien que quieres hacer....

Si me puedes comentar con mas detalle.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear múltiples instancias de un objeto y guardarlas en lista

Publicado por Manuel (3 intervenciones) el 19/05/2012 09:41:58
Gracias por responder.

El programa pretende "diseccionar" las lineas del listado de fichero, clasificando cuantos pdfs, docs y tal hay en cada carpeta y cuáles almacenar juntos todos los docs, todos los pdfs, etc.

El caso es que había reducido el código al mínimo para intentar que fuera lo más fácil de entender posible.

Yo he programado mucho en Java y en C++ y Python me pilla algo novato. Mi problema es el QUE TU DICES: en la lista solamente guardo los punteros y querría saber cómo hacer para almacenar distintos objetos en lugar del mismo puntero siempre.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Crear múltiples instancias de un objeto y guardarlas en lista

Publicado por xve (1646 intervenciones) el 19/05/2012 20:54:34
Si por ejemplo, quieres guardar los nombre de los archivos en vez de los punteros podrías hacerlo así:
1
listaProyectos.append(auxiliar.Nombre)

De esta manera, únicamente guardarías el nombre del archivo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear múltiples instancias de un objeto y guardarlas en lista

Publicado por Manuel (3 intervenciones) el 21/05/2012 08:24:18
Muchas gracias xve

¿Pero y si lo que quiero es guardar varias instancias (objetos) de la clase Fichero? De modo que pudiera hacer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Fichero:
    Nombre=""
    Tipo=""
 
    def __init__(self):
        self.Nombre=""
        self.Tipo=0
 
auxiliar = Fichero()
auxiliar.Nombre = "uno"
listaProyectos.append(auxiliar)
auxiliar.Nombre= Fichero
axiliar.Nombre = "dos"
listaProyectos.append (auxiliar)
 
for proyecto in listaProyectos:
        salida.write(proyecto.Nombre+'\n')


Haciendo eso, ahora mismo la salida que obtengo es:
1
2
dos
dos


Cuando lo que yo quiero obtener es
1
2
uno
dos


Es decir, modifico siempre el mismo objeto. ¿Cómo puedo hacer esto? Es decir, crear dos objetos distintos y meterlos en una lista.

Muchisimas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar