我正在尝试在文件中存储许多变量。我已经尝试过JSON,pickle和shelve,但它们似乎只接受一个变量
import shelve
myShelve = shelve.open('my.shelve')
myShelve.update(aasd,
basd,
casd,
dasd,
easd,
fasd,
gasd,
hasd,
iasd,
jasd)
myShelve.close()
和泡菜
import pickle
with open("vars.txt", "wb") as File:
pickle.dumps(aasd,
basd,
casd,
dasd,
easd,
fasd,
gasd,
hasd,
iasd,
jasd,
File)
我得到的错误是
TypeError: update() takes at most 2 positional arguments (11 given)
和
TypeError: pickle.dumps() takes at most 2 positional argument (11 given)
我不确定除了使用数据库之外是否存在任何其他存储变量的方法,但这有点超出了我目前的能力。
答案 0 :(得分:0)
使用pickle
,您一次转储一个对象。每次转储到文件时,都会添加另一个“记录”。
import pickle
with open("vars.txt", "wb") as File:
for item in (aasd,
basd,
casd,
dasd,
easd,
fasd,
gasd,
hasd,
iasd,
jasd)
pickle.dump(item,File)
现在,当您想要恢复数据时,使用pickle.load
从文件中读取下一个“记录”:
import pickle
with open('vars.txt') as fin:
aasd = pickle.load(fin)
basd = pickle.load(fin)
...
或者,根据数据的类型,假设数据是json
能够序列化的内容,您可以将其存储在json列表中:
import json
# dump to a string, but you could use json.dump to dump it to a file.
json.dumps([aasd,
basd,
casd,
dasd,
easd,
fasd,
gasd,
hasd,
iasd,
jasd])
答案 1 :(得分:0)
您一次只能腌制一个变量,但它可以是dict
或其他Python对象。您可以将许多变量存储在一个对象中并对该对象进行pickle。
import pickle
class Box:
pass
vars = Box()
vars.x = 1
vars.y = 2
vars.z = 3
with open("save_vars.pickle", "wb") as f:
f.write(pickle.dumps(vars))
with open("save_vars.pickle", "rb") as f:
v = pickle.load(f)
assert vars.__dict__ == v.__dict__
答案 2 :(得分:0)
编辑:我只想到了一种存储变量的不同方式,但这有点奇怪,我想知道大师们对此有何看法。
您可以保存包含变量定义的python代码的文件,例如vars.py
,其中包含定义值的简单语句:
x = 30
y = [1,2,3]
然后要将其加载到您的程序中,只需执行from vars import *
,您就会定义x
和y
,就像您输入了它们一样。
以下原始正常答案......
有一种方法可以使用JSON将变量返回而无需重新定义其名称,但您必须先创建变量字典。
import json
vars={} # the dictionary we will save.
LoL = [ range(5), list("ABCDE"), range(5) ]
vars['LOList'] = LoL
vars['x'] = 24
vars['y'] = "abc"
with open('Jfile.txt','w') as myfile:
json.dump(vars,myfile,indent=2)
现在加载它们:
with open('Jfile.txt','r') as infile:
D = json.load(infile)
# The "trick" to get the variables in as x,y,etc:
globals().update(D)
现在x和y是从它们的字典条目中定义的:
print x,y
24 abc
还有一种使用逐变量定义的替代方案。通过这种方式,您不必预先创建字典,但是做在重新加载时必须按正确的顺序重命名变量。
z=26
w="def"
with open('Jfile2.txt','w') as myfile:
json.dump([z,w],myfile,indent=2)
with open('Jfile2.txt','r') as infile:
zz,ww = json.load(infile)
输出:
print zz,ww
26 def