If you need realy very-very simple solution to save/load several variables in few lines of code then you can do just next:
# Save
with open('data.dat', 'wb') as f:
pickle.dump((exp, kills, items), f)
# Load
with open('data.dat', 'rb') as f:
exp, kills, items = pickle.load(f)
But if you want something fancy and nice then I implemented next a bit advanced solution:
Try it online!
def save(file_name, **nargs):
import pickle, os
if os.path.exists(file_name):
with open(file_name, 'rb') as f:
nargs = {**pickle.load(f), **nargs}
with open(file_name, 'wb') as f:
pickle.dump(nargs, f)
def load(file_name, *pargs, **nargs):
import pickle, os
d = {}
if os.path.exists(file_name):
with open(file_name, 'rb') as f:
d = pickle.load(f)
if len(pargs) + len(nargs) == 0:
return d
r = (
tuple(d[k] for k in pargs) +
tuple(d.get(k, defv) for k, defv in nargs.items())
)
return r if len(pargs) + len(nargs) != 1 else r[0]
# ----- Usage examples ------
# First script, saving things
# Save some things
exp, kills, items = 1, "three", [3, '4']
save('data.dat', exp = exp, kills = kills, items = items)
# Save one more thing later
mana = 456
save('data.dat', mana = mana)
# Maybe change/update some already saved things later
kills = "four"
save('data.dat', kills = kills)
# Second script, loading things
# Load some things
kills, items = load('data.dat', 'kills', 'items')
print('kills', kills, 'items', items)
# Load some other things later
mana, exp = load('data.dat', 'mana', 'exp')
print('mana', mana, 'exp', exp)
# Also possible to load just one thing
mana = load('data.dat', 'mana')
print('mana', mana)
# Also possible to provide default value for part of fields if they are missing
exp, energy, mana = load('data.dat', 'exp', energy = 'missing_energy', mana = 'missing_mana')
print('exp', exp, 'energy', energy, 'mana', mana)
# Load everything that was saved, if no extra params provided
all_saved = load('data.dat')
print('all_saved', all_saved)
Output:
kills four items [3, '4']
mana 456 exp 1
mana 456
exp 1 energy missing_energy mana 456
all_saved {'exp': 1, 'kills': 'four', 'items': [3, '4'], 'mana': 456}