[英]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("\033[1;30;40m EXP: " + EXP_load +", Slain: " +", Items: "+ "\033[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'
如果您需要非常非常簡單的解決方案來在幾行代碼中保存/加載多個變量,那么您可以執行以下操作:
# 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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.