es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo evito sobrescribir mis datos guardados? (pickle en python)

Mientras estaba usando pickle, me encontré con un problema (para mí) donde sobrescribe los datos guardados con los datos guardados por defecto cuando se abre el script. ¿Hay alguna manera de detectar si hay algo en el archivo?


import pickle savedata = ['tutorialisntfinished', 'tutorialisfinished', 'level1isntfinished', 'level1isfinished', 'level2isntfinished', 'level2isfinished', 'bossfightisntfinished', 'bossfightisfinished'] pickle.dump(savedata, open('savedata.json', 'wb'))

Y luego tengo algunos scripts que detectan escenas y cambian variables.

Tengo un sistema para cambiar los datos guardados al eliminar (por ejemplo) el “isntfinished” de la lista llamada savedata. Todo esto funciona, pero cuando vuelves a abrir el script, se reinicia. ¿Alguien tiene una solución para esto?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una forma de detectar si hay algo en el archivo antes de cargarlo con pickle es verificar el tamaño del archivo. Si el tamaño del archivo es mayor que cero, entonces el archivo tiene datos existentes y se puede cargar sin sobrescribirlo. Aquí tienes un ejemplo:

    import os
    import pickle
    
    nombre_archivo = 'savedata.pkl'
    
    if os.path.getsize(nombre_archivo) > 0:
        # el archivo tiene datos existentes, cargarlo
        with open(nombre_archivo, 'rb') as f:
            savedata = pickle.load(f)
    else:
        # el archivo está vacío, inicializar savedata
        savedata = ['tutorialnoestáterminado', 'tutorialestáterminado',
                    'nivel1noestáterminado', 'nivel1estáterminado',
                    'nivel2noestáterminado', 'nivel2estáterminado',
                    'combatecontraeljefenoestáterminado', 'combatecontraeljefeestáterminado']
    
    # hacer algo con savedata
    

    En este ejemplo, utilizamos la función os.path.getsize() para obtener el tamaño del archivo en bytes. Si el tamaño del archivo es mayor que cero, cargamos los datos existentes con pickle.load(). Si el archivo está vacío, inicializamos savedata con algunos valores predeterminados.

    Utilizando este enfoque, puedes asegurarte de no sobrescribir datos existentes al cargar el archivo con pickle.

Comments are closed.