Pickle 转储多个变量并在另一个目录的另一个文件中读取它们
Pickle dump multiple variables and read them on aother file on another directory
如何转储多个 python 变量并将它们加载到另一个文件中?
我现在的代码:
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"))
其他目录下的其他文件:
EXP_load = pickle.load(open("data.dat", "rb"))
print("3[1;30;40m EXP: " + EXP_load +", Slain: " +", Items: "+ "3[0m")
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'
如果您真的需要 very-very 几行代码中 save/load 多个变量的简单解决方案,那么您可以执行下一步:
# 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)
但是如果你想要一些花哨而漂亮的东西,那么我实施了下一个有点高级的解决方案:
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)
输出:
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}
如何转储多个 python 变量并将它们加载到另一个文件中?
我现在的代码:
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"))
其他目录下的其他文件:
EXP_load = pickle.load(open("data.dat", "rb"))
print("3[1;30;40m EXP: " + EXP_load +", Slain: " +", Items: "+ "3[0m")
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'
如果您真的需要 very-very 几行代码中 save/load 多个变量的简单解决方案,那么您可以执行下一步:
# 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)
但是如果你想要一些花哨而漂亮的东西,那么我实施了下一个有点高级的解决方案:
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)
输出:
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}