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

如何使用Python解析字符串并将数据填充至对应变量

实现步骤与代码示例

1. 核心思路

先从结构化字符串中提取原始键值对,再通过键名映射将原始字段名转换为你需要的变量名,最后根据指定类型完成转换,最终输出为JSON或XML。

2. 具体代码实现

第一步:解析原始字符串

把输入的字符串按行分割,过滤空行和区块标题,提取所有Key: Value格式的键值对:

sample_text = """
EMPLOYEE INFORMATION
Name: EmployeeName
Employee Type: Salaried/Hourly
Department: DepartmentName
Department Number: 123
Employee Title: EmployeeTitle
Supervisor Name: SupervisorName

FACILITIES INFORMATION
Location: OfficeLocation

SECURITY INFORMATION
Access card required?: True
Copy access card from: CopyFromUser
Elevated access justification: False
"""

def parse_raw_text(text):
    raw_data = {}
    # 分割行并过滤空行
    lines = [line.strip() for line in text.split("\n") if line.strip()]
    for line in lines:
        if ":" not in line:
            # 跳过不带冒号的区块标题行
            continue
        # 分割键和值(只分割第一个冒号,避免值里有冒号的情况)
        raw_key, raw_value = line.split(":", 1)
        raw_data[raw_key.strip()] = raw_value.strip()
    return raw_data

# 得到原始键值对字典
parsed_raw = parse_raw_text(sample_text)

第二步:键名映射与类型转换

定义两个映射表:一个把原始字段名转成你需要的变量名,另一个指定每个变量的转换规则(处理字符串、整数、布尔值):

# 原始字段名 -> 目标变量名的映射
key_mapping = {
    "Name": "EmployeeName",
    "Department": "DepartmentName",
    "Access card required?": "AccessCardRequired",
    "Department Number": "DepartmentNumber"
}

# 目标变量名 -> 类型转换规则的映射
# 布尔值处理:假设原始值是True/False或Yes/No,可根据实际情况修改判断条件
type_converters = {
    "EmployeeName": str,
    "DepartmentName": str,
    "AccessCardRequired": lambda val: val.lower() in ("true", "yes"),
    "DepartmentNumber": int
}

final_data = {}
for raw_key, target_key in key_mapping.items():
    # 处理字段缺失的情况,可根据需求改为抛出异常
    if raw_key not in parsed_raw:
        final_data[target_key] = None
        continue
    raw_value = parsed_raw[raw_key]
    converter = type_converters[target_key]
    try:
        final_data[target_key] = converter(raw_value)
    except ValueError:
        # 转换失败时保留原始值,或改为设为None
        final_data[target_key] = raw_value

# 查看转换后的结果
print(final_data)
# 输出示例:
# {'EmployeeName': 'EmployeeName', 'DepartmentName': 'DepartmentName', 'AccessCardRequired': True, 'DepartmentNumber': 123}

第三步:输出为JSON或XML

基于转换后的字典,直接用Python标准库输出为目标格式:

输出JSON
import json

with open("employee_data.json", "w", encoding="utf-8") as f:
    json.dump(final_data, f, indent=2, ensure_ascii=False)
输出XML
import xml.etree.ElementTree as ET

# 创建根节点
root = ET.Element("EmployeeData")
# 逐个添加子节点
for var_name, var_value in final_data.items():
    child_node = ET.SubElement(root, var_name)
    child_node.text = str(var_value)

# 写入XML文件
tree = ET.ElementTree(root)
tree.write("employee_data.xml", encoding="utf-8", xml_declaration=True)

3. 扩展说明

  • 如果原始字符串中的布尔值是其他格式(比如Y/N),修改type_converters里的lambda判断条件即可。
  • 可以根据需要扩展key_mapping和type_converters,加入更多字段(比如EmployeeType、Location等)。
  • 若需要处理更复杂的格式异常(比如重复键、值为空),可以在解析和转换步骤中添加额外的错误处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:03:19