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

2024-09-30 18:29:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

下面是配置(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]

这个代码可能很糟糕(我没有受过正规训练),我不知道从这里该怎么办。谢谢您的帮助。你知道吗


Tags: 命令reconfigoutputreturndef方式语法
1条回答
网友
1楼 · 发布于 2024-09-30 18:29:05

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

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

然后是一个新函数configWrite,它将编辑配置并用新的value覆盖arrays

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

相关问题 更多 >