<legend id='NrdBb'><style id='NrdBb'><dir id='NrdBb'><q id='NrdBb'></q></dir></style></legend>

<small id='NrdBb'></small><noframes id='NrdBb'>

    <bdo id='NrdBb'></bdo><ul id='NrdBb'></ul>
<tfoot id='NrdBb'></tfoot>

  • <i id='NrdBb'><tr id='NrdBb'><dt id='NrdBb'><q id='NrdBb'><span id='NrdBb'><b id='NrdBb'><form id='NrdBb'><ins id='NrdBb'></ins><ul id='NrdBb'></ul><sub id='NrdBb'></sub></form><legend id='NrdBb'></legend><bdo id='NrdBb'><pre id='NrdBb'><center id='NrdBb'></center></pre></bdo></b><th id='NrdBb'></th></span></q></dt></tr></i><div id='NrdBb'><tfoot id='NrdBb'></tfoot><dl id='NrdBb'><fieldset id='NrdBb'></fieldset></dl></div>

        Pyyaml:修改aws-auth-cm.yaml,保留多行字符串

        时间:2024-08-10
        <legend id='bt9ZL'><style id='bt9ZL'><dir id='bt9ZL'><q id='bt9ZL'></q></dir></style></legend>

              <tbody id='bt9ZL'></tbody>
                <bdo id='bt9ZL'></bdo><ul id='bt9ZL'></ul>
                <tfoot id='bt9ZL'></tfoot>

                <small id='bt9ZL'></small><noframes id='bt9ZL'>

                1. <i id='bt9ZL'><tr id='bt9ZL'><dt id='bt9ZL'><q id='bt9ZL'><span id='bt9ZL'><b id='bt9ZL'><form id='bt9ZL'><ins id='bt9ZL'></ins><ul id='bt9ZL'></ul><sub id='bt9ZL'></sub></form><legend id='bt9ZL'></legend><bdo id='bt9ZL'><pre id='bt9ZL'><center id='bt9ZL'></center></pre></bdo></b><th id='bt9ZL'></th></span></q></dt></tr></i><div id='bt9ZL'><tfoot id='bt9ZL'></tfoot><dl id='bt9ZL'><fieldset id='bt9ZL'></fieldset></dl></div>
                  本文介绍了Pyyaml:修改aws-auth-cm.yaml,保留多行字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在尝试用python加载一个YAML文件,对其进行修改并将其转储回来。 YAML如下所示:

                  data:
                    mapRoles: |
                      - username: system:node:{{EC2PrivateDNSName}}
                        groups:
                        - system:bootstrappers
                        - system:nodes
                  kind: ConfigMap
                  metadata:
                    name: aws-auth
                    namespace: kube-system
                  

                  我要修改它,以便输出文件在mapRoles:

                  中包含一个新行rolearn: awsarn
                  data:
                    mapRoles: |
                      - username: system:node:{{EC2PrivateDNSName}}
                        groups:
                          - system:bootstrappers
                          - system:nodes
                        rolearn: awsarn
                  kind: ConfigMap
                  metadata:
                    name: aws-auth
                    namespace: kube-system
                  

                  但是我得到一个输出,其中mapRoles值像字符串一样被引用,并且包括文字

                  apiVersion: v1
                  data:
                    mapRoles: "- username: system:node:{{EC2PrivateDNSName}}
                    groups:
                      - system:bootstrappers
                  
                          - system:nodes
                    rolearn: arnaws"
                  kind: ConfigMap
                  metadata:
                    name: aws-auth
                    namespace: kube-system
                  

                  我使用的代码:

                  with open ('/tmp/aws-auth-cm.yaml') as f:
                    content = yaml.safe_load(f)
                    content['data']['mapRoles'] = content['data']['mapRoles'] + '  rolearn: awsarn' 
                  with open("/tmp/aws-auth-cm.yaml", "w") as f:
                    yaml.safe_dump(content, f, default_flow_style=False)
                  

                  我还尝试使用yaml.safe_dump(content, f, default_flow_style=False, default_style='|'),然后所有值都有|-,键用双引号引起来:

                  "apiVersion": |-
                    v1
                  "data":
                    "mapRoles": |-
                      - username: system:node:{{EC2PrivateDNSName}}
                        groups:
                          - system:bootstrappers
                          - system:nodes
                        rolearn: arnaws
                  "kind": |-
                    ConfigMap
                  "metadata":
                    "name": |
                  

                  是否可以将style=‘|’仅应用于字符串,并确保键不带引号?

                  PyYAML

                  您可以尝试使用推荐答案执行此操作,但您需要加载挡路样式文字标量 (这就是|指示的这种多行构造的名称) 字符串子类,请确保可以修改它,然后在转储时使用特殊的表示符 对于再次转储为文字标量的子类。

                  完成此任务的简单方法是从PyYAML升级到 ruamel.yaml(免责声明:我是该包的作者),它不仅保留了 字面上的挡路,它还支持更新的YAML1.2规范(2009年发布), 保留注释和标记、整数和浮点格式,以及(可选)多余引号:

                  import sys
                  import ruamel.yaml
                  
                  
                  yaml = ruamel.yaml.YAML()
                  with open('aws-auth-cm.yaml') as f:
                      content = yaml.load(f)
                  content['data']['mapRoles'] += '  rolearn: awsarn
                  '
                  with open('aws-auth-cm.yaml', 'w') as f:
                      yaml.dump(content, f)
                  

                  这提供了:

                  data:
                    mapRoles: |
                      - username: system:node:{{EC2PrivateDNSName}}
                        groups:
                        - system:bootstrappers
                        - system:nodes
                        rolearn: awsarn
                  kind: ConfigMap
                  metadata:
                    name: aws-auth
                    namespace: kube-system
                  
                  请注意,我使用+=更改 从文字标量加载的"字符串"。并且我在 添加的字符串的末尾,因为否则文字标量将是 随着|-引入,-是挡路大嚼特嚼 运算符指示 剥离

                  这篇关于Pyyaml:修改aws-auth-cm.yaml,保留多行字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:如何使用discord.py对不一致服务器中的每个人进行DM? 下一篇:如何用python解析YAML字符串?

                  相关文章

                2. <legend id='CAavj'><style id='CAavj'><dir id='CAavj'><q id='CAavj'></q></dir></style></legend>

                    <bdo id='CAavj'></bdo><ul id='CAavj'></ul>

                  1. <i id='CAavj'><tr id='CAavj'><dt id='CAavj'><q id='CAavj'><span id='CAavj'><b id='CAavj'><form id='CAavj'><ins id='CAavj'></ins><ul id='CAavj'></ul><sub id='CAavj'></sub></form><legend id='CAavj'></legend><bdo id='CAavj'><pre id='CAavj'><center id='CAavj'></center></pre></bdo></b><th id='CAavj'></th></span></q></dt></tr></i><div id='CAavj'><tfoot id='CAavj'></tfoot><dl id='CAavj'><fieldset id='CAavj'></fieldset></dl></div>

                    <tfoot id='CAavj'></tfoot>
                  2. <small id='CAavj'></small><noframes id='CAavj'>