一、主要功能
1.1、核心功能:递归地查找并替换字典、列表或字符串中所有以&.为前缀的字段值。
1.2、替换规则:将&.xxx形式的字符串替换为预定义的变量值。
#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Users: LiMu
# @Files: parametric.py
# @Times: 2025/6/18
# @Software: PyCharm
import os
import json
import time
import random
import re
from tools.global_data import globaldict
from typing import Any, Dict
class DictParameterReplacer:
def __init__(self):
self.project_variables = globaldict
def replace_ampersand_fields(self, data: Any,all_dict:dict=None) -> Any:
"""
:replace_ampersand_fields: 递归替换字典中所有包含'&.'前缀的字段值
:param data: 要处理的数据(支持字典/列表/基本类型)
:all_dict: 自定义替换参数
:return: 处理后的数据
"""
if all_dict is not None:
self.project_variables = all_dict
if isinstance(data, dict):
return {k: self.replace_ampersand_fields(v) for k, v in data.items()}
elif isinstance(data, list):
return [self.replace_ampersand_fields(item) for item in data]
elif isinstance(data, str):
return self._replace_ampersand_values(data)
return data
def _replace_ampersand_values(self, value: str) -> str:
"""
:_replace_ampersand_values: 替换字符串中的&.字段为项目变量
:param value: 包含&.的字符串
:return: 替换后的字符串
"""
if not isinstance(value, str) or '&.' not in value:
return value
# 使用正则匹配所有&.字段
pattern = r'&\.(\w+)'
matches = re.finditer(pattern, value)
result = value
for match in matches:
full_match = match.group(0) # 匹配到的完整字符串(如 &.DeskID1)
field_name = match.group(1) # 捕获组提取的字段名(如 DeskID1)
# 从项目变量中获取替换值,如果不存在则保留原值
replacement = self.project_variables.get(field_name, full_match)
result = result.replace(full_match, str(replacement))
return result
# 使用示例
if __name__ == "__main__":
# 创建替换器实例
replacer = DictParameterReplacer()
# old_data原始数据(含多层嵌套和&.字段),
old_data = {"Token":"","SessionID":"&.SessionID","Data":{"DeskID1":"&.DeskID1","DeskID2":'&.DeskID1',"Nested":{"User":"User_&.UserID","Other":["&.Item1","normal"]}}}
replaced_data = {"SessionID":"6666","DeskID1":"Desk00000001","User":"u9550"}
# 执行替换
new_data = replacer.replace_ampersand_fields(old_data,replaced_data)
#调试打印
print("未替换的原始数据:{}".format(old_data))
print("替换后的新新数据:{}".format(new_data))
二、类结构
2.1、DictParameterReplacer 类
2.1.1、初始化方法 init
2.1.2、初始化时从globaldict(全局数据模块)获取项目变量
2.2、主要方法
2.2.1、replace_ampersand_fields
递归处理数据,支持字典、列表和基本类型
参数:
data: 要处理的数据
all_dict: 可选的自定义替换参数字典
如果提供了all_dict,则用它替换默认的项目变量
2.2.2、_replace_ampersand_values (私有方法)
实际执行字符串替换
使用正则表达式匹配所有&.前缀的字段
从项目变量中查找替换值,找不到则保留原值
三、代码特点
递归处理:能处理多层嵌套的数据结构
类型安全:严格检查输入数据类型
灵活性:
支持自定义替换字典
找不到匹配变量时保留原值
正则表达式:使用re模块高效匹配替换模式
四、示例使用
脚本底部提供了一个使用示例:
创建包含&.前缀字段的嵌套字典
定义替换值字典
执行替换并打印结果
五、潜在用途
这种参数替换机制常用于:
测试框架中的参数化
配置文件的动态处理
模板渲染
API请求的预处理
六、改进建议
可以添加对${var}或{{var}}等其他常见变量格式的支持
考虑添加日志记录替换过程
可以增加对默认值的支持,如&.var|default语法