- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Ruamel 来保留人工编辑的 YAML 文件中的引用样式。
我有示例输入数据:
---
a: '1'
b: "2"
c: 3
我使用以下方式读入数据:
def read_file(f):
with open(f, 'r') as _f:
return ruamel.yaml.round_trip_load(_f.read(), preserve_quotes=True)
然后我编辑该数据:
data = read_file('in.yaml')
data['foo'] = 'bar'
我写回磁盘使用:
def write_file(f, data):
with open(f, 'w') as _f:
_f.write(ruamel.yaml.dump(data, Dumper=ruamel.yaml.RoundTripDumper, width=1024))
write_file('out.yaml', data)
输出文件是:
a: '1'
b: "2"
c: 3
foo: bar
有没有一种方法可以强制对字符串 'bar' 进行硬引用,而无需在文件的其余部分强制执行该引用样式?
(另外,我可以阻止它删除三个破折号 ---
吗?)
最佳答案
为了保留字符串标量的引号(和文字 block 样式),ruamel.yaml¹——在往返模式中——将这些标量表示为 SingleQuotedScalarString
、DoubleQuotedScalarString
和 PreservedScalarString
。这些非常薄的包装器的类定义可以在 scalarstring.py
中找到。当序列化这些实例时,它们是“按读取的方式”编写的,尽管有时当事情变得困难时,表示器会退回到双引号,因为它可以表示任何字符串。
要在添加新键值对(或更新现有键值对时)时获得此行为,您只需自己创建这些实例:
import sys
from ruamel.yaml import YAML
from ruamel.yaml.scalarstring import SingleQuotedScalarString, DoubleQuotedScalarString
yaml_str = """\
---
a: '1'
b: "2"
c: 3
"""
yaml = YAML()
yaml.preserve_quotes = True
yaml.explicit_start = True
data = yaml.load(yaml_str)
data['foo'] = SingleQuotedScalarString('bar')
data.yaml_add_eol_comment('# <- single quotes added', 'foo', column=20)
yaml.dump(data, sys.stdout)
给出:
---
a: '1'
b: "2"
c: 3
foo: 'bar' # <- single quotes added
yaml.explicit_start = True
重新创建(多余的)文档开始标记。顶级字典对象“不知道”这样的标记是否在原始文件中,因此您必须手动重新添加它。
请注意,如果没有 preserve_quotes
,值 1
和 2
无论如何都会有(单)引号,以确保它们被看到作为字符串标量而不是整数。
¹ 我是其中的作者。
关于python - 保留引号并在 Ruamel 中添加带引号的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39262556/
我似乎无法弄清楚如何使用 Ruamel.yaml 在数据之间添加一个空行。 假设我有数据: --- a: 1 b: 2 我需要添加到这一点,以便我将有: --- a: 1 b: 2 c: 3 我知道空
我正在使用 Ruamel Python 库以编程方式编辑人工编辑的 YAML 文件。 我很难理解如何将评论插入结构化数据。 我有一些数据: a: b: banana c: apple d:
我正在使用 Ruamel Python 库以编程方式编辑人工编辑的 YAML 文件。源文件具有按字母顺序排序的键。 我不确定这是一个基本的 Python 问题还是一个 Ruamel 问题,但是我尝试对
如果我有多个引用,当我使用 Python 中的 ruaml.yaml 将它们写入 YAML 文件时,我得到: helptexts: - &help-one help_text: |
我有一个使用 ruamel.yaml 和 ruamel.yaml.jinja2 一段时间的 docker 容器。最近它开始失败了。以下 dockerfile 重现了该问题: FROM ubuntu R
这里是python版本: Python 3.6.5 我想安装 ruamel: pip3 install ruamel 但我无法安装它: (venvpython3) d3alg@ubuntu-59:/$
我跑了一个 pip install ruamel.yaml 当我尝试做的时候 import ruamel.yaml 我得到一个错误: ImportError: No module named ruam
ruamel.yaml 文档很少,我在这里没有找到我需要的响应。 my_file.yaml 的内容: desc: "blahblahblah" 问题1:如何(以编程方式)将“size”添加为与“des
我需要对带有注释的 YAML 文件进行排序。我正在使用 ruamel.yaml 库来保留 YAML 中的注释,但是当我对项目进行排序时,注释被放置在错误的位置。 people = """\ # man
我希望使用 ruamel.yaml 对大型人工编辑的 YAML 文件执行一些自动编辑。 输入文件包含合并键,如下所示: foo: &foo color: red bar: name: qux
我想在我的项目中使用 Ruamel YAML,我使用代理,所以我下载了 来自https://pypi.python.org/pypi/ruamel.yaml的gzip包并安装它 pip install
我正在尝试使用 ruamel.yaml 使用 python 动态修改 AWS CloudFormation 模板。我添加了以下代码以使 safe_load 与 CloudFormation 函数(例如
在哪里可以找到 Python 包的完整文档 ruamel.yaml哪个加载和转储 YAML 文件? Python Package Index 仅给出了如何使用注释的示例。我正在尝试了解如何整体使用该包
我有两个问题! 有没有办法防止 round_trip_dump 甚至只是常规转储在句子中间断行?每当我的 YAML 文件中有一个长句子(即描述),并且我使用脚本来更改一些内容时,它就会断行并破坏我的文
我想转储一个包含嵌套列表组件的字典,其中列表的每一行都在自己的行上。我还想保持字典顺序。 这是一个 MWE: import sys from ruamel import yaml from ruame
MWE: import sys from ruamel.yaml import YAML yaml = YAML(typ='safe') yaml.default_flow_style = False
使用 Python 3.4.7,ruamel.yaml 版本 0.15.35,以下内容对我不起作用: import sys import enum import ruamel.yaml from ru
我正在使用 Ruamel 来保留人工编辑的 YAML 文件中的引用样式。 我有示例输入数据: --- a: '1' b: "2" c: 3 我使用以下方式读入数据: def read_file(f):
我正在使用 ruamel.yaml 来解析复杂的 YAML 文档,其中某些标记的节点需要特殊处理。按照已发布示例的建议,我使用 add_multi_constructor 注入(inject)自定义解
给出以下代码: from ruamel.yaml import YAML yaml = YAML() with open(filename) as f: z = yaml.load(f) ya
我是一名优秀的程序员,十分优秀!