gpt4 book ai didi

python - 在Python中读取Jinja文件

转载 作者:行者123 更新时间:2023-12-01 01:17:35 32 4
gpt4 key购买 nike

我必须读取Jinja 文件,并且必须从文件中获取特定属性。考虑下面的例子:我有 demo.jinja 文件包含:

resources:
- name: a-new-network
type: compute.v1.network
properties:
IPv4Range: 10.0.0.1/16

我必须获取type属性的值,即compute.v1.network

我尝试过:将上面的代码视为 yaml。并尝试过:

a = """resources:
- name: a-new-network
type: compute.v1.network
properties:
IPv4Range: 10.0.0.1/16"""

print yaml.load(a)

正在打印 {'resources': [{'type': 'compute.v1.network', 'name': 'a-new-network', 'properties': {'IPv4Range': ' 10.0.0.1/16'}}]}

由此,我可以轻松获取type:["resources"][0]["type"]

这按上述 .jinja 文件的预期工作。

我还有另一种 jinja 格式,其中包含类似代码的 {% --- %}

{% for i in range(properties['readReplicas']) %}
- name: {{ ID }}-rr-{{ i }}
type: sqladmin.v1beta4.instance
properties:
backendType: SECOND_GEN
instanceType: READ_REPLICA_INSTANCE
databaseVersion: {{ properties['cloudsql']['databaseVersion'] }}
region: {{ properties['cloudsql']['region'] }}
masterInstanceName: $(ref.{{ ID }}-master.name)
replicaConfiguration:
failoverTarget: false
settings:
tier: {{ properties['cloudsql']['tier'] }}
{% if properties['failover'] %}
metadata:
dependsOn:
- {{ ID }}-failover
{% endif %}
{% endfor %}

在这种情况下如何获取type的值,即sqladmin.v1beta4.instance?因为对于上面的 jinja 内容,我不能将其视为 yaml

最佳答案

我尝试过并且成功了:

from jinja2 import Environment, FileSystemLoader
import yaml

config_src = yaml.load(open("./demo1.yaml"))
config_data = config_src["resources"][0]
env = Environment(loader = FileSystemLoader("./"), trim_blocks=True, lstrip_blocks=True)
template = env.get_template("./demo1.jinja")
data = template.render(config_data)
sdata = yaml.load(data)
print(sdata["resources"][0]["type"])

关于python - 在Python中读取Jinja文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54176731/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com