Python代码,用于自动将已解析的json对象分配给其原始名称

时间:2016-07-02 14:33:48

标签: 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_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']
.
.
.

对于我抛弃的每个变量?

2 个答案:

答案 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函数成功地将每个字符串解析为一个对象,并按上面给出的方式使用它获得问题中提出的结果。