[Python]如何使用递归编辑嵌套数组配置值

时间:2018-05-19 05:30:43

标签: python json regex recursion config

我有一个由多个嵌套数组和字典组成的配置文件。我需要一个可以编辑任何变量的文本命令。这是在Python 3中。

以下是config(json)的示例:

{
    "joinMsg":{    
        "help":[
            "I need help",
            "Type !help or !info"
        ]
}

命令语法可以更改为其他内容,但如下所示:

!config write joinMsg;help;1 'Try typing !help'

我想出了如何以这种方式从配置中读取,但我设置递归的方式意味着我没有办法替换该值。

这就是我所拥有的,数组就像joinMsg; help; 1 with; deliminators:

# reads from the config file
def configRead(arrays):
    try:
        arrays = configSearch(arrays)
        print(arrays)
        output = config
        for r in arrays:
            output = output[r]
    except:
        output = 'No array found'
    return output

# recursive config helper
def configSearch(arrays):
    searchRE = re.match(r'([^;]+);(.+)', arrays, re.I)
    if searchRE:
        output = configSearch(searchRE.group(2))
        output.insert(0, searchRE.group(1))
        return output
    else:
        return [arrays]

这段代码可能很糟糕(我没有经过正式培训)而且我不知道该怎么做。感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

首先,这是一个修改后的configSearch,它不使用递归,也处理数组索引:

def configSearch(arrays):
    arrays = arrays.split(";")
    return [int(a) if a.isdigit() else a for a in arrays]

然后这是一个新功能configWrite,它将编辑配置配置并用新arrays覆盖value

def configWrite(arrays, value):
    arrays = configSearch(arrays)
    print(arrays)
    output = config
    for r in arrays[:-1]:
        output = output[r]
    output[arrays[-1]] = value