python - 在 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 的新手。任何人都可以请帮忙。
谢谢
解决方案
添加先前的响应,如果您想传递提取,您应该使用单独的迭代它们for
:
for extract in data["new"]["extracts"]:
for k,v in extract.items():
val = v.replace('{{ place-holder }}', 'new_str')
print(val)
推荐阅读
- java - 映射到 getter/setter 时,使用 GSON 从 POST 请求解析 json 时出错
- android - 无法加载库:dlopen 失败:找不到库“libboost.so”
- javascript - 为什么 Splunk 仪表板中的时间显示为“未定义”?
- ember.js - 有没有办法在 ember 车把模板中定义和迭代数组?
- python - 如何为数据框中的所有列绘制 Seaborn Distplots 矩阵
- javascript - 如何让分页和模态窗口都工作?
- office-ui-fabric - 我可以在非 Microsoft 内部应用程序中使用 Office UI Fabric React 吗?
- vb.net - Visual Basic - ReadOnly 属性中的日期格式
- c++ - 位成员倒序?
- c# - 如何使用 ASP.NET Webforms 在 DataRow 中呈现按钮?