I think you are “simplifying” at the wrong aspect. The complexity of a solution does not depend if you have 0/1, because it does not matter if you want to store a boolean, string, number or number. In any case you need the managing overhead, which can add quite a lot of overhead.
To answer your question you can use this code:
import bge
def storeVariableValue():
variable = 1
bge.logic.globalDict["variable"] = variable
print("stored variable value of",variable)
then activate the SaveActuator to write it to a file
the other way around:
Activate the LoadActuator to read data from a file
the next frame restore the value:
import bge
def restoreVariableValue():
variable = bge.logic.globalDict["variable"]
print("restored variable value of",variable)
You see this is not that complicated. It does not even matter if you want to store/restore 0,1,“teddy bear” or 3.121415. [Yes, it will become more complex when you store complex objects such as lists, dictionaries and KX_GameObjects.]
Now you might be confused, especially because the code uses globalDict and you explicitly did not want to use it. The truth is, if you are not able to use as dictionary you can’t use any other solution too. It is a “ready-to-use” and pretty simple method. Opening and accessing a file adds more complexity which is much harder to understand.
Anyway. The real question is:
WHAT do you want to store WHEN and WHERE to get them?
and related:
WHAT do you want to restore WHEN and WHERE to put them?
I do not use the term save/load as this is another operation that can be done by the actuators.