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

如何使用Python从指定格式的YAML文件中批量提取数据?

用Python批量提取YAML文件中的数据

首先,你得先装个处理YAML的依赖库,终端里跑这个命令就行:

pip install pyyaml

接下来咱们一步步拆解怎么搞定这个数据提取需求:

1. 读取并解析YAML文件

先用PyYAML加载文件内容,这里推荐用safe_load,避免加载恶意YAML的安全风险:

import yaml

# 替换成你的YAML文件路径
with open('your_solution.yaml', 'r') as f:
    yaml_content = yaml.safe_load(f)

# 定位到核心数据所在的条目(Solution是列表,第二个元素索引为1,包含目标值和变量)
solution_core = yaml_content['Solution'][1]

2. 提取Objective目标值

从嵌套结构里取出最优解的目标值很直接:

optimal_objective = solution_core['Objective']['objective']['Value']
print(f"最优目标值: {optimal_objective}")

3. 批量提取Variable变量数据

这部分是重点——Variable里的键是带参数的变量名,值是对应的数值。我们可以把这些数据整理成更易后续处理的格式,比如拆分变量类型和参数:

variables = solution_core['Variable']

# 遍历所有变量,逐一提取信息
for full_var_name, var_info in variables.items():
    # 拆分变量类型和参数,比如把battery_E[b1,1,1]拆成类型battery_E和参数[b1,1,1]
    var_type, params_str = full_var_name.split('[', 1)
    params = params_str.rstrip(']').split(',')
    params = [p.strip() for p in params]  # 去掉参数里多余的空格
    
    # 拿到变量对应的数值
    var_value = var_info['Value']
    
    # 这里可以根据需求打印或存储,比如:
    print(f"变量类型: {var_type}, 参数: {params}, 数值: {var_value}")

如果你的YAML里Variable的格式是把Value: xxx写成了字符串(比如解析后var_info是字符串而非字典),那稍微调整下提取逻辑:

# 针对var_info是字符串的情况(比如"Value: 0.25")
var_value = float(var_info.split(': ')[1])

4. 把提取的数据保存(可选)

要是需要把变量数据导出成CSV方便后续分析,这里给个示例:

import csv

with open('extracted_variables.csv', 'w', newline='') as csvfile:
    fieldnames = ['变量类型', '参数1', '参数2', '参数3', '数值']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    
    writer.writeheader()
    for full_var_name, var_info in variables.items():
        var_type, params_str = full_var_name.split('[', 1)
        params = params_str.rstrip(']').split(',')
        params = [p.strip() for p in params]
        
        # 处理参数数量不一致的情况(比如有的变量是2个参数,有的是3个)
        while len(params) < 3:
            params.append('')
        
        var_value = var_info['Value']
        writer.writerow({
            '变量类型': var_type,
            '参数1': params[0],
            '参数2': params[1],
            '参数3': params[2],
            '数值': var_value
        })

这样不管Variable里有多少条数据,都能批量提取并处理好啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:39:31