Save and load object position in bge
To save, you only need to:


Get the object's attributes
Store them in a dictionary
Convert this dictionary to string
Write the resulting data to disk


To load this data, you only need to:


Read this saved data
Convert the loaded string to dictionary
Set the object's attributes


Here's a working script (below) and a example blend file. Press 1 to load and 2 to save on the example blend file.





import bge
from ast import literal_eval

def save(cont):

    # Objects
    own = cont.owner

    # Sensors
    sensor = cont.sensors[0]

    # Properties
    path = bge.logic.expandPath('//')
    savedata = {
        'position' : list(own.worldPosition),
        'rotation' : list(own.localOrientation.to_euler())
    }

    ### PROCESS ###
    if sensor.positive:

        # Creates/overwrites savedata file
        with open(path + 'savedata.sav', 'w') as openedfile:

            # Write savedata dict as str
            openedfile.write(str(savedata))
            print('Data saved to ' + openedfile.name)

def load(cont):

    # Objects
    own = cont.owner

    # Sensors
    sensor = cont.sensors[0]

    # Properties
    path = bge.logic.expandPath('//')
    savedata = None

    ### PROCESS ###
    if sensor.positive:

        try:
            # Try to open savedata file
            with open(path + 'savedata.sav', 'r') as openedfile:

                # Reads savedata and evaluates it from str to dict
                savedata = literal_eval(openedfile.read())
                print('Loaded data from ' + openedfile.name)

            # Set object attributes from loaded data
            own.worldPosition = savedata['position']
            own.localOrientation = savedata['rotation']

        except FileNotFoundError:
            print('Save data not found')