如何在 Python 中从字符串安全解析键值对并构建字典

20次阅读

如何在 Python 中从字符串安全解析键值对并构建字典

本文介绍如何将格式不统一(分隔符为 `;`、`:` 或空格)的字符串高效解析为键值对,并推荐使用字典而非动态变量,兼顾安全性与可维护性。

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免费学习笔记(深入)”;

  • 若原始字符串存在奇数个 token(如末尾多出一个键而无值),代码会自动跳过,避免 IndexError;
  • 键名中的 ; 和 : 仅在末尾被剥离,中间字符保留(例如 ‘user:name’ → 键 ‘user:name’);
  • 所有值均为字符串类型;如需自动类型推断(如数字转 int/Float),可在赋值前添加 ast.literal_eval() 或自定义转换逻辑;
  • 字典支持 .get(), .keys(), in 成员检测等标准操作,便于后续数据处理。

综上,用字典替代动态变量是 Python 中处理此类配置式字符串的惯用、安全且可扩展的最佳实践。

text=ZqhQzanResources