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

如何从YAML文件读取配置并转换为自定义路径键值对格式?

Flatten YAML to Path-Based Key-Value Pairs

Got it, let's work through this. You need to take a dynamic, potentially large YAML file with an unpredictable nested structure and flatten it into that parent/child/key = value format—perfect for cases where you need a flat, easy-to-scan view of hierarchical configs.

Here's a practical Python solution that handles arbitrary nesting (including dictionaries and even lists, just in case your YAML expands to include those later):

Step 1: Install the YAML parser

First, make sure you have PyYAML installed to read and parse the YAML file:

pip install pyyaml

Step 2: The Flattening Script

This recursive function will traverse every node in the YAML structure, build the path string incrementally, and output the desired key-value lines when it hits a leaf node:

import yaml

def flatten_yaml(data, parent_path=""):
    for key, value in data.items():
        # Build the current path by appending the key to the parent path
        current_path = f"{parent_path}/{key}" if parent_path else key
        
        if isinstance(value, dict):
            # If the value is another dictionary, recurse into it
            flatten_yaml(value, current_path)
        elif isinstance(value, list):
            # Handle lists by adding the index to the path (adjust format if needed)
            for idx, item in enumerate(value):
                list_path = f"{current_path}/{idx}"
                if isinstance(item, dict):
                    flatten_yaml(item, list_path)
                else:
                    print(f"{list_path} = {item}")
        else:
            # We've reached a leaf node—print the path and value
            print(f"{current_path} = {value}")

# Load your YAML configuration file
with open("application.yaml", "r") as f:
    yaml_data = yaml.safe_load(f)

# Run the flattening function
flatten_yaml(yaml_data)

Step 3: Test with Your Example YAML

For your provided application.yaml:

organization:
  products:
    product1:
      manager: "Rob"
      engineer: "John"
    product2:
      manager: "Henry"
      lead: "patrick"

The script will output exactly the format you're looking for:

organization/products/product1/manager = Rob
organization/products/product1/engineer = John
organization/products/product2/manager = Henry
organization/products/product2/lead = patrick

Notes for Edge Cases

  • Lists: The script handles lists by appending the index to the path (e.g., organization/teams/0/name = DevOps). If you prefer a different list format (like using brackets), tweak the list_path line to something like f"{current_path}[{idx}]".
  • Extra Deep Nesting: If you expect extremely deep structures, recursion might hit Python's default recursion limit. You can rewrite the function using an iterative approach (with a stack) to avoid this.
  • Special Characters: If your keys have slashes or spaces, add a quick string replace (e.g., current_path = current_path.replace("/", "\\/")) to escape them and prevent path confusion.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:19:01