如何在Python中简化JSON文件操作

3

我的公司非常严格遵守 pydocstyle。我尝试修改嵌套在 json 文件中的这些值,但是超出了行限制。

    Rem_Conf['RemediationConfigurations'][0]['Parameters']['AutomationAssumeRole']['StaticValue']['Values'][0] = rolearn
    Rem_Conf['RemediationConfigurations'][0]['Parameters']['GranteeId']['StaticValue']['Values'][0] = canid
    Rem_Conf['RemediationConfigurations'][0]['Parameters']['TargetBucket']['StaticValue']['Values'][0] = targetbucket

我该如何压缩这段内容以满足79个字符的pydocstyle限制?
4个回答

3
一种方法是使用简短的命名变量替换内联键。
cfg='RemediationConfigurations'
params='Parameters'
role='AutomationAssumeRole'
sval='StaticValue'
val='Values'
guid='GranteeId'
tbuk='TargetBucket'
Rem_Conf[cfg][0][params][role][sval][val][0] = rolearn
Rem_Conf[cfg][0][params][guid][sval][val][0] = canid
Rem_Conf[cfg][0][params][tbuk][sval][val][0] = targetbucket

这里最长的一行是60个字符,它可以使读者更清晰地看到数值的模式。


2

您可以将代码行用括号括起来,如下所示。当然,随意调整格式。这是 black 格式化程序的输出结果。

(
    Rem_Conf["RemediationConfigurations"][0]["Parameters"]["AutomationAssumeRole"][
        "StaticValue"
    ]["Values"][0]
) = rolearn
(
    Rem_Conf["RemediationConfigurations"][0]["Parameters"]["GranteeId"]["StaticValue"][
        "Values"
    ][0]
) = canid
(
    Rem_Conf["RemediationConfigurations"][0]["Parameters"]["TargetBucket"][
        "StaticValue"
    ]["Values"][0]
) = targetbucket

我认为,这将是一种易读的格式:

(Rem_Conf
    ["RemediationConfigurations"]
    [0]
    ["Parameters"]
    ["AutomationAssumeRole"]
    ["StaticValue"]
    ["Values"]
    [0]
) = rolearn

这是black Python格式化工具在您的原始代码上输出的内容:
Rem_Conf["RemediationConfigurations"][0]["Parameters"]["AutomationAssumeRole"][
    "StaticValue"
]["Values"][0] = rolearn
Rem_Conf["RemediationConfigurations"][0]["Parameters"]["GranteeId"]["StaticValue"][
    "Values"
][0] = canid
Rem_Conf["RemediationConfigurations"][0]["Parameters"]["TargetBucket"]["StaticValue"][
    "Values"
][0] = targetbucket

2
其他答案更好,我只想补充一点,你至少可以像这样使用反斜杠:
Rem_Conf['RemediationConfigurations'][0]['Parameters'] \
            ['AutomationAssumeRole']['StaticValue']['Values'][0] = rolearn
Rem_Conf['RemediationConfigurations'][0]['Parameters'] \
            ['GranteeId']['StaticValue']['Values'][0] = canid
Rem_Conf['RemediationConfigurations'][0]['Parameters'] \
            ['TargetBucket']['StaticValue']['Values'][0] = targetbucket

Python文档中如下所述:

2.1.5. 显式行连接

使用反斜杠字符 (\),可以将两个或多个物理行连接成逻辑行,如下所示:当一个物理行以不是字符串文字或注释的反斜杠结尾时,它与以下内容连接成为单个逻辑行,删除反斜杠和以下的换行符。


1

我会简单地使用一个中间值:

Parameters = Rem_Conf['RemediationConfigurations'][0]['Parameters']
Parameters['AutomationAssumeRole']['StaticValue']['Values'][0] = rolearn
Parameters['GranteeId']['StaticValue']['Values'][0] = canid
Parameters['TargetBucket']['StaticValue']['Values'][0] = targetbucket

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接