【发布时间】:2019-02-22 10:13:52
【问题描述】:
我正在尝试从文件中解析 YAML 输入:
root: {
children : { key: "test-key", version: "{{ test_version | default( '1.0.0-SNAPSHOT' ) }}"}
}
我正在使用 ruamel.yaml,使加载的代码部分配置为保留引号,然后我手动添加一个新条目:
yaml = ruamel.yaml.YAML()
yaml.preserve_quotes = True
yaml.width = 4096
yaml.indent(sequence=4, offset=2)
with open(yml_file, 'r') as file:
print("Modifying file: '%s'..." % str(file))
data = yaml.load(file)
data['root'][new_project_name.lower()] = {'key': "%s" % new_project_name.lower(),
'test_version': "{{ %s_version | default(\'1.0.0-SNAPSHOT\') }}"
% new_project_name.lower()}
with open(yml_file, 'w') as file:
yaml.dump(data, file)
问题是,当使用新条目写入文件时,我将所有内容都放在同一行中,因此似乎没有保留新行(CR LF),(它似乎在没有它们的情况下加载它) 你知道有什么方法可以保存它们吗?
输出是(同一行中的所有内容):
root: {children : { key: "test-key", version: "{{ test_version | default( '1.0.0-SNAPSHOT' ) }}"}}
【问题讨论】:
-
检查问题stackoverflow.com/questions/24418449/pretty-output-with-pyyaml。答案通过
pyyaml和ruamel.yaml提供可能的解决方案 -
你的输出是假的,它不能用我知道的任何版本的
ruamel.yaml生成。代码中没有在映射指示器和键之间生成空格的部分,当然也没有代码有时会这样做(在key:之前),有时不会(在children:之前)。 总是提供工作代码,这样我们就可以看到你真正做了什么(错误),只是缺少几行可以剪切和粘贴,为什么要让事情不完整? -
你是对的,我需要编辑输出来向你展示这个概念,所以可能我犯了一个错误,遗憾的是我不能使用原始代码。无论如何,正如你说的那样,没有空格,输出是一样的。