You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中实现等效Ansible Template的功能?

实现JSON字典中%var%格式变量的批量替换

核心逻辑

递归遍历JSON加载后的字典(或列表)的每个元素,对字符串类型的值使用正则匹配%var%格式的占位符,并用给定的变量字典完成批量替换,支持嵌套结构。

完整实现代码

import json
import re

def do_some_magic(payload, variables):
    # 匹配%var%格式的占位符,捕获变量名
    var_regex = re.compile(r'%(\w+)%')

    def traverse_and_replace(item):
        if isinstance(item, str):
            # 替换所有匹配的占位符,未找到的变量保留原格式
            return var_regex.sub(lambda match: variables.get(match.group(1), match.group(0)), item)
        elif isinstance(item, dict):
            # 递归处理字典的每个键值对
            return {key: traverse_and_replace(value) for key, value in item.items()}
        elif isinstance(item, list):
            # 递归处理列表的每个元素
            return [traverse_and_replace(element) for element in item]
        # 非字符串/字典/列表类型直接返回
        return item

    return traverse_and_replace(payload)

# 示例使用流程
if __name__ == "__main__":
    # 1. 从JSON文件加载原始payload
    with open("your_payload.json", "r", encoding="utf-8") as f:
        raw_payload = json.load(f)
    
    # 2. 定义需要替换的变量集合
    replacement_vars = {
        "app_name": "user_auth_service",
        "max_conn": "100",
        "log_path": "/var/log/app.log"
    }
    
    # 3. 执行批量替换
    processed_payload = do_some_magic(raw_payload, replacement_vars)
    
    # 4. 输出或保存处理后的结果
    print(json.dumps(processed_payload, indent=2, ensure_ascii=False))

关键细节说明

  • 正则适配:默认正则%(\w+)%仅匹配字母、数字和下划线组成的变量名,如果需要支持含特殊字符的变量,可修改为%([^%]+)%(匹配任意非%的字符)
  • 容错处理:如果变量字典中没有对应key,会保留原占位符;若需要抛出异常或替换为空,可修改variables.get(...)部分的逻辑
  • 嵌套支持:自动处理字典和列表的嵌套结构,深层的占位符也能被正确替换

内容的提问来源于stack exchange,提问作者Alpha123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:37:16