繁体   English   中英

如何使用 ruamel.yaml 将内容添加到 YAML 文件?

[英]How to add contents to YAML file using ruamel.yaml?

这是 input.yml 文件

PRODUCT_HOME: /app
config: 
  active-profiles: mysql,oauth2
  driverClassName: com.mysql.cj.jdbc.Driver
  datasourceurl: jdbc:h2:file:./data
  datasourceuser: sa
server:
  error:
    path: /error
  whitelabel:
    enabled: false
  port: 8080

Output 文件应如下所示:

PRODUCT_HOME: /app
config: 
  active-profiles: mysql,oauth2
  driverClassName: com.mysql.cj.jdbc.Driver
  datasourceurl: jdbc:h2:file:./data
  datasourceuser: sa
server:
   error:
      path: /error
   whitelabel:
      enabled: false
   port: 8080
   servlet:
     session:
       cookie:
         secure: true

如何使用 Python (ruamel.yaml) package 实现此目的?

您应该为要添加的数据创建正确的数据结构,然后将该数据结构添加到作为server值的映射

import sys
import ruamel.yaml

from pathlib import Path

in_file = Path('input.yaml')
    
nd = dict(servlet=dict(session=dict(cookie=dict(secure=True))))

yaml = ruamel.yaml.YAML()
data = yaml.load(in_file)
data['server'].update(nd)

# print(data)
yaml.dump(data, sys.stdout)

这使:

PRODUCT_HOME: /app
config:
  active-profiles: mysql,oauth2
  driverClassName: com.mysql.cj.jdbc.Driver
  datasourceurl: jdbc:h2:file:./data
  datasourceuser: sa
server:
  error:
    path: /error
  whitelabel:
    enabled: false
  port: 8080
  servlet:
    session:
      cookie:
        secure: true

或者,如果您有要添加为 YAML 输入的数据,您可以加载它然后更新:

yaml_str = """
servlet:
  session:
    cookie:
      secure: true
"""

yaml = ruamel.yaml.YAML()
nd = yaml.load(yaml_str)
data = yaml.load(in_file)
data['server'].update(nd)

# print(data)
yaml.dump(data, sys.stdout)

这也给出了:

PRODUCT_HOME: /app
config:
  active-profiles: mysql,oauth2
  driverClassName: com.mysql.cj.jdbc.Driver
  datasourceurl: jdbc:h2:file:./data
  datasourceuser: sa
server:
  error:
    path: /error
  whitelabel:
    enabled: false
  port: 8080
  servlet:
    session:
      cookie:
        secure: true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM