【问题标题】:How to make human readable yaml files with PyYaml [duplicate]如何使用 PyYaml 制作人类可读的 yaml 文件 [重复]
【发布时间】:2021-03-25 03:28:50
【问题描述】:

我正在使用 python 加载另一个 python 文件并将其添加到 yaml 文件中。我遇到的问题是生成的 yaml 文件将 python 文件的全部内容表示为单个字符串,换行符替换为\n

我的代码如下:

import yaml

with open("yaml_file.yaml", "r") as doc1_content:
    doc1_content = doc1_content.read()

with open("python_file.py", "r") as python_fh:
    python_content = python_fh.read()

doc1_content = yaml.safe_load(doc1_content)
doc1_content['key'] = python_content

with open("output_yaml.yaml", "w") as generated_yaml:
    yaml.dump(doc1_content, generated_yaml, default_flow_style=False, default_style=None)

似乎将 python_content 分配给 dict 会执行转换。

所以问题是,

  1. 是否可以在分配给字典时阻止转换?或者...
  2. 是否可以让 Pyyaml 的 yaml.dump() 将字符串转换为多行字符串并替换 \n

编辑:经过更多测试,似乎只有在我插入的 python 文件超过 455 个字节时才会发生。

示例输入:

import boto3
import json
import re
from datetime import datetime
from distutils.util import strtobool


config_client = boto3.client('config')
elb_client = boto3.client('elb')
elbv2_client = boto3.client('elbv2')
sts_client = boto3.client('sts')

sns_client = boto3.client('sns')


account_id = sts_client.get_caller_identity().get('Account')
region = sts_client.meta.region_name


def fetch_all_items(method, response_key, next_token_key, **kwargs):
 if

输出:

key: "import boto3\nimport json\nimport re\nfrom datetime import datetime\nfrom distutils.util\
  \ import strtobool\n\n\nconfig_client = boto3.client('config')\nelb_client = boto3.client('elb')\n\
  elbv2_client = boto3.client('elbv2')\nsts_client = boto3.client('sts')\n\nsns_client\
  \ = boto3.client('sns')\n\n\naccount_id = sts_client.get_caller_identity().get('Account')\n\
  region = sts_client.meta.region_name\n\n\ndef fetch_all_items(method, response_key,\
  \ next_token_key, **kwargs):\n if\n"
somekey: somevalue

【问题讨论】:

  • 代码按照你说的做 - 不涉及转换。 ssm_doc_path 正在引用您使用 safe_load 转换为字典的 yaml 文件。 ssm_python_path 被读取为文本块,并在您将其转储之前分配给加载的 yaml 中的“key”键。您是否希望这两个文件都是要合并的 yaml 文件?
  • @PaulWhipp 我更新了问题以提供澄清信息。似乎只有在 python 文件达到一定大小时才会发生。

标签: python yaml pyyaml


【解决方案1】:

我认为您正在寻找一种方法来以更易于阅读的方式在您的 yaml 中表示多行字符串。为此,this question 的答案可能很好地满足了您的需求。

【讨论】:

    猜你喜欢
    • 2021-05-17
    • 2019-05-24
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2011-03-15
    • 2012-02-28
    相关资源
    最近更新 更多