IIC2233 / syllabus-2021-1

Repositorio oficial del curso IIC2233 Programación Avanzada 🚀✨
https://iic2233.github.io
38 stars 49 forks source link

Duda sobre deserializar un archivo con pickle #636

Closed luzmagurzua closed 3 years ago

luzmagurzua commented 3 years ago

Duda

Hola! Muy buen día :) Estoy estudiando los contenidos de esta semana, haciendo un ejercicio de la actividad sumativa 4 del semestre pasado, específicamente trabajando en la función cargar_instancia(ruta) que: " recibe la ruta que corresponde a la ubicación del archivo info_personas.bin (archivo con una lista de usuarios serializados) y retorna una lista con las instancias de la clase Usuario. Todas las instancias deben tener la clave desencriptada y el atributo clave_encriptada igual a False". Entonces, con ayuda de este ejemplo encontrado en internet:

import pickle

# object to be serialized
x = [1, 2, 3, 4, 5]

# serialize
with open('output.dat', 'wb') as f:
    pickle.dump(x, f)

# deserialize
with open('output.dat', 'rb') as f:
    data = pickle.load(f)
    print((data, type(data)))

# Lo apliqué a mi función, algo así como 
def cargar_instancia(ruta):
    with open(ruta, 'rb') as file:
        data = pickle.load(file)
        print((data, type(data)))

para ver cómo funcionaba. Entonces quería saber si estaba bien, y aprovechar de mencionar que me aparece esto en el output with open(ruta, 'rb') as file: FileNotFoundError: [Errno 2] No such file or directory: 'info_personas.bin'

Saludos y gracias de antemano.

luzmagurzua commented 3 years ago

El archivo se llama info_personas.bin y sale esto: ��4]�(�main��Usuario���)��}�(�nombre�� cristozille�� peliculas�]�(�La Naranja Mecánica��FLCL�� Forest Gump��Código Enigma��Avengers: Infinity War�� Knives Out��1Piratas del Caribe: La Maldición del Perla Negra�� Pulp Fiction��&Star Wars III: La Venganza de los Sith��The Social Network�� Summer Wars�e�indices_peliculas�]�(�4��5��6��7��8��9��11��12��13��16��17�e�password��QEPD��clave_encriptada��ubh)��}�(h� jturquiza�h]�(�The Grand Budapest Hotel�h h h�Parasite�h�Scott Pilgrim vs the Wolrd�h�'El Señor de los Anillos: Las Dos Tores��Call me by your name�eh]�(�2�hhh�10��12��14��16��18��3�eh"� NNSSXSO]S6464�h$�ubh)��}�(h�tocococa�h]�(�Blade Runner 2049�h)h-h h h hhhhhh,�El lobo de Wall Street�eh]�(�1�h/h5hhhhh�10��11��12��18��19�eh"� luchojara�h$�ubh)��}�(h�dchahuan�h]�(h;h-h h h)h hhh+�The shape of water�hheh]�(h>h5hhh/h�11��13��14��15��12��17�eh"�nosoyelintruso�h$�ubh)��}�(h�cruz�h]�(h-h h h hhhhIhh<eh]�(h5hhhh�10��13��15��17��19�eh"� rsws}yrvsfsx�h$�ube.

aaossa commented 3 years ago

Hola @luzmagurzua , el uso de pickle.load en tu función está bien 👌 La excepción que colocaste (FileNotFoundError) es porque tu código no encuentra el archivo que quieres deserializar, así que asegurate de colocarlo en la ruta correcta. Sobre el output, es medio difícil revisartelo, pero si quieres puedes colocar parte del código que hiciste y también agregar algunos print para inspeccionar los atributos que se pide modificar. ¡Éxito con tu estudio 🙌 !