【发布时间】: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 会执行转换。
所以问题是,
- 是否可以在分配给字典时阻止转换?或者...
- 是否可以让 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 文件达到一定大小时才会发生。