Python代码自动将解析后的json对象分配给它们的原始名称
我已经转储了几个需要存储在json对象中的变量,如下所示-Python代码自动将解析后的json对象分配给它们的原始名称,python,json,Python,Json,我已经转储了几个需要存储在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_afte
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”导入中编写代码一样*
这就是我试过的-
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']
.
.
.
对于我转储的每个变量?您当前的代码不起作用,因为以下几行只是绑定了一个名为
'key'
的全局变量(并对循环中的后续值重新绑定):
global key
key = variable[key]
虽然我不确定您的设计是否真的很好,但如果您确定希望json文件中的所有值都作为全局变量,我会将循环替换为:
globals().update(variable)
globals()
函数返回一个包含当前模块所有全局变量的字典。与从locals()
(可能是本地名称空间的副本,而不是它的实际实现)获得的字典不同,您可以修改globals()
字典,并在以后像normal一样使用变量。以下是解决方案-
with open('variable.json', 'r') as fp:
variable = json.load(fp)
for key in variable.keys():
exec(key + " = variable['" + key + "']")
以前的问题是,每个“键”都是字符串,而不是对象。
使用exec函数成功地将每个字符串解析为一个对象,并按照上面给出的方法使用它,得到问题中所问的结果。我也在函数外部尝试了同样的代码,没有使用resultsvariable=dict(line.split(“,”)表示行in open('variable.json','r'),现在这个问题已经重新打开,请将您的解决方案添加为答案(而不是问题的附录)。