RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1590663
Accepted
f f
f f
Asked:2024-08-14 20:40:52 +0000 UTC2024-08-14 20:40:52 +0000 UTC 2024-08-14 20:40:52 +0000 UTC

将yaml文件解析成表

  • 772

输入yaml文件是:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example
  namespace: Main
spec:
  selector:
    matchLabels:
      app: httpd
  replicas: 3
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
        - name: httpd
          image: >-
            image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest
          ports:
            - containerPort: 8080

需要将其变成一个表,其中第一列是键,第二列是值,并且键必须与嵌套一起保存。

首先我上传yaml文件:

import yaml
from yaml.loader import FullLoader
yaml_file_path = 'example/deployment.yaml'
with open(yaml_file_path) as file:
  data = yaml.load(file, Loader=FullLoader)
  print(data)

在监视器上显示整个文件。

现在我想遍历整个文件并处理每个键,我采用递归方法:

def GetData(data):
  for item in data:
    print(item)
    GetData(item)

with open(yaml_file_path) as file:
  data = yaml.load(file, Loader=FullLoader)
  GetData(data)

它进入无限递归并因错误而崩溃。

请帮忙解决一下。

python
  • 1 1 个回答
  • 26 Views

1 个回答

  • Voted
  1. Best Answer
    CrazyElf
    2024-08-14T21:25:05Z2024-08-14T21:25:05Z

    好吧,这是一个递归遍历的例子。除了词典之外,您还可以查看列表。它们至少由一个元素组成,但是哪里能保证不会出现多个元素的列表呢?因此,我从头开始对列表元素进行编号。

    def GetData(data, prefix):
        if isinstance(data, dict):
            for k, v in data.items():
                yield from GetData(v, f'{prefix}/{k}')
        elif isinstance(data, list):
            for i, v in enumerate(data):
                yield from GetData(v, f'{prefix}/{i}')
        else:
            yield (prefix, data)
    
    with open(yaml_file_path) as file:
        data = yaml.load(file, Loader=FullLoader)
        for item in GetData(data, ''):
            print(item)
    

    输出是元组,您可以将它们放入所需的形式:

    ('/apiVersion', 'apps/v1')
    ('/kind', 'Deployment')
    ('/metadata/name', 'example')
    ('/metadata/namespace', 'Main')
    ('/spec/selector/matchLabels/app', 'httpd')
    ('/spec/replicas', 3)
    ('/spec/template/metadata/labels/app', 'httpd')
    ('/spec/template/spec/containers/0/name', 'httpd')
    ('/spec/template/spec/containers/0/image', 'image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest')
    ('/spec/template/spec/containers/0/ports/0/containerPort', 8080)
    

    PS 你的代码正在循环,因为它首先迭代根字典的键,然后将这些键本身作为集合迭代 - 一次一个字符,然后将每个这样的字符作为集合迭代,就是这样,然后是这个字符会无限重复,因为集合如何作为同一字符再次迭代。

    ['apiVersion', 'kind', ...] -> ['a', 'p', 'i', ...] -> ['a'] -> ['a'] -> ...
    
    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5