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

如何用PyYaml遍历docker-compose.yaml中的用户可自定义文本值?

解决方案

1. 无现成框架直接满足需求

没有专门的框架能无需指定键就自动筛选并遍历Docker Compose里的文本类型自定义参数,你需要基于PyYAML解析后的嵌套结构,自行实现递归遍历逻辑。

2. 基于PyYAML实现递归遍历文本值

PyYAML会把Docker Compose文件解析成嵌套的字典(dict)和列表(list)结构,你可以通过递归遍历所有节点,筛选出字符串类型(str)的值,还能同步记录值所在的嵌套路径,方便定位参数位置。

示例代码

import yaml

def collect_text_values(data, current_path=""):
    text_values = []
    if isinstance(data, dict):
        for key, value in data.items():
            new_path = f"{current_path}.{key}" if current_path else key
            text_values.extend(collect_text_values(value, new_path))
    elif isinstance(data, list):
        for idx, item in enumerate(data):
            new_path = f"{current_path}[{idx}]" if current_path else f"[{idx}]"
            text_values.extend(collect_text_values(item, new_path))
    elif isinstance(data, str):
        text_values.append((current_path, data))
    return text_values

# 解析Docker Compose文件
with open("docker-compose.yaml", "r") as f:
    compose_data = yaml.safe_load(f)

# 收集所有文本值
text_params = collect_text_values(compose_data)

# 打印结果并统计数量
print(f"共找到 {len(text_params)} 个可自定义文本参数:")
for path, value in text_params:
    print(f"- {path}: `{value}`")

3. 对比不同Docker Compose文件

要对比多个文件的参数数量或内容,只需对每个文件重复上述解析和收集步骤:

  • 统计数量:直接对比len(text_params)的数值
  • 对比内容:可将两个文件的text_params转换成集合(仅保留值)或直接对比元组列表,找出参数差异

补充说明

你提到直接遍历根字典只能拿到顶层键,是因为Docker Compose的结构是多层嵌套的,必须通过递归遍历才能深入所有子节点,筛选出所有文本类型的自定义参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:55:02