首页 > 解决方案 > 在 YAML 中解析和替换字符串

问题描述

我需要用 Python 中的另一个字符串替换 YAML 中出现的每个字符串。

name: responses
new:
    sources:
    - table: response
      source: xxx
      tier: raw
      view: vresponses
      columns:
      - a
      - b
      - c
      - d
      - eff_dt

    extracts:
    - sql: >-
        CREATE or REPLACE TEMPORARY VIEW sql1
        AS
        SELECT distinct
         some_cols,
         {{ place-holder }}
        FROM
        vresponse AS RES
        inner JOIN tab2 AS SUR
        ON RES.SrveyId = SUR.SrveyId

    - sql: >-
        CREATE or REPLACE TEMPORARY VIEW sql1
        AS
        SELECT distinct
         some_cols2,
         {{ place-holder }}
        FROM
        vresponse2 AS RES
        inner JOIN tab3 AS SUR
        ON RES.x = SUR.y

从上面的示例中,我想遍历键下所有 sql 语句中所有出现-sql key的文本并替换所有出现的文本,并用新值替换它们。{{ place-holder }}-sql

我已经尝试过了,但导致以下错误:

>>> input_file = "my_file.yaml"
>>> data = yaml.load(open(input_file))
>>> i = 0
>>> for k, v in data['new']['extracts'][i]:
...     val = v.replace('{{ place-holder }}', 'new_str')
...     print(val)
...     i = i + 1
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

替换后,我想将内容转储回 yaml 格式。我是 Python 和 YAML 的新手。任何人都可以请帮忙。

谢谢

标签: pythonpython-3.xyaml

解决方案


添加先前的响应,如果您想传递提取,您应该使用单独的迭代它们for

for extract in data["new"]["extracts"]:
    for k,v in extract.items():
        val = v.replace('{{ place-holder }}', 'new_str')
        print(val)

推荐阅读