1

How can I dump multiple python variables and load them in another file?

the code I have now:

EXP_load = pickle.load(open("data.dat", "rb"))
if EXP_load == "0":
    EXP = str("0")
    Kills = str("0")
    Items = str("0")
    pickle.dump(EXP, open("data.dat", "wb"))
    pickle.dump(Kills, open("data.dat", "wb"))
    pickle.dump(Items, open("data.dat", "wb"))

The other file in the other directory:

    EXP_load = pickle.load(open("data.dat", "rb"))
print("\033[1;30;40m EXP: " + EXP_load +", Slain: " +", Items: "+ "\033[0m")
Mark Rotteveel
  • 82,132
  • 136
  • 114
  • 158
MdeGraaff
  • 122
  • 9

2 Answers2

0
import pickle
def saveLoad(opt):
    global calc
    if opt == "save":
        f = file(filename, 'wb')
        pickle.dump(calc, f, 2)
        f.close
        print 'data saved'
    elif opt == "load":
        f = file(filename, 'rb')
        calc = pickle.load(f)
    else:
        print 'Invalid saveLoad option'
n0nvme
  • 663
  • 1
  • 12
  • Where do I define the variable in this code and please include your code in a ``` ``` statement so its easier to read. – MdeGraaff Oct 14 '20 at 09:27
0

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}
Arty
  • 8,027
  • 3
  • 16
  • 26