

新闻资讯
技术学院本文介绍如何将格式不统一(分隔符为 `;`、`:` 或空格)的字符串高效解析为键值对,并推荐使用字典而非动态变量,兼顾安全性与可维护性。
在 Python 中处理类似 'var_name; var_value var_name1; var_value1 var_name2 var_value2 var_name3: var_value3' 的字符串时,核心挑战在于:键与值之间的分隔方式不固定(可能是 ;、:,甚至仅靠空格),且键名和值均可能包含字母、数字及下划线等合法标识符字符。此时,切忌使用 exec()、globals() 或 locals() 动态创建变量——这不仅破坏作用域清晰性、引发命名冲突,更会带来严重的安全风险(如注入恶意代码)。
推荐方案是构建一个结构化、可查询的字典(dict)。以下是一个健壮、简洁的实现:
string = "var_name; var_value var_name1; var_value1 var_name2 var_value2 var_name3: var_value3"
def parse_key_value_pairs(s):
tokens = s.split()
result = {}
i = 0
while i < len(tokens):
if i + 1 >= len(tokens):
break # 忽略孤立的键(无对应值)
key = tokens[i].rstrip(";:")
value = tokens[i + 1]
result[key] = value
i += 2
return result
data = parse_key_value_pairs(string)
print(data)
# 输出: {'var_name': '
var_value', 'var_name1': 'var_value1', 'var_name2': 'var_value2', 'var_name3': 'var_value3'}该函数通过 split() 将字符串按空白符切分为原子 token,再以两两配对的方式遍历:对每个偶数索引的 token 去除末尾的 ; 或 : 得到干净的键名,其后一个 token 即为对应值。整个过程不依赖正则,逻辑清晰、性能良好,且天然兼容含空格的值(若需支持带空格的值,需改用更高级的解析策略,如正则匹配或自定义分词器)。
注意事项:
综上,用字典替代动态变量是 Python 中处理此类配置式字符串的惯用、安全且可扩展的最佳实践。