我已经转储了一些我需要存储在json对象中的变量,如下所示 -
def write_json():
variable = {}
variable['p_id'] = p_id
variable['s_id'] = s_id
variable['t_id'] = t_id
variable['b_start'] = b_start
variable['b_end'] = b_end
variable['wsp_after'] = wsp_after
variable['h_id'] = h_id
variable['word'] = word
variable['norm_word'] = norm_word
variable['lemma'] = lemma
variable['pos'] = pos
variable['ner'] = ner
variable['dep'] = dep
variable['quote'] = quote
variable['ch_id'] = ch_id
with open('variable.json', 'w') as fp:
json.dump(variable,fp, sort_keys = True)
我想编写一段代码,这些代码会自动获取这些变量,如果您从'X.py'import *
写入的话会发生这种情况。这就是我试过的 -
def get_variables():
with open('variable.json', 'r') as fp:
variable = json.load(fp)
for key in variable:
global key
key = variable[key]
但是,当我尝试打印原始值时 -
print t_id
NameError: name 't_id' is not defined
我需要做些什么来实现我想要的而不是麻烦地输入
t_id = variable['t_id']
.
.
.
对于我抛弃的每个变量?
答案 0 :(得分:0)
您当前的代码不起作用,因为以下行仅绑定(并为循环中的后续值重新绑定)一个名为'key'
的全局变量:
global key
key = variable[key]
虽然我不确定你的设计是否真的很好,但如果你确定你想要将json文件中的所有值作为全局变量,我会用以下代码替换循环:
globals().update(variable)
globals()
函数返回一个包含所有当前模块全局变量的字典。与从locals()
得到的字典(可能是本地命名空间的副本,而不是它的实际实现)不同,您可以修改globals()
字典并使用之后的常规变量。
答案 1 :(得分:0)
这是解决方案 -
with open('variable.json', 'r') as fp:
variable = json.load(fp)
for key in variable.keys():
exec(key + " = variable['" + key + "']")
之前的问题是每个'key'都是一个字符串,而不是一个对象。 使用exec函数成功地将每个字符串解析为一个对象,并按上面给出的方式使用它获得问题中提出的结果。