Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何往返ruamel.yaml字符串,如;关于;_Ruamel.yaml - Fatal编程技术网

如何往返ruamel.yaml字符串,如;关于;

如何往返ruamel.yaml字符串,如;关于;,ruamel.yaml,Ruamel.yaml,当使用一些YAML往返时,我看到以下问题。鉴于这一投入: root: matchers: - select: "response.body#state" test: all expected: "on" 我看到这个输出: root: matchers: - select: response.body#state test: all expected: on 注意,在YAML中,on解析为布尔值true而off解析为fal

当使用一些YAML往返时,我看到以下问题。鉴于这一投入:

root:
  matchers:
    - select: "response.body#state"
      test: all
      expected: "on"
我看到这个输出:

root:
  matchers:
    - select: response.body#state
      test: all
      expected: on
注意,在YAML中,
on
解析为布尔值
true
off
解析为
false

以下代码用于读/写:

# Use the default (round-trip) settings.
yaml = YAML()

if args.source == '-':
    src = sys.stdin
else:
    src = open(args.source)

doc = yaml.load(src)
process(args.tag, set(args.keep.split(',')), doc)

if args.destination == '-':
    dest = sys.stdout
else:
    dest = open(args.destination, 'w')

yaml.dump(doc, dest)
过程
功能未修改值。在对结构进行爬网后,它仅删除输入中带有特殊标记的内容

如何使输出成为字符串而不是布尔值?

您可以这样写:

注意,在YAML中,
on
解析为布尔值
true
off
解析为
false

这句话不是真的(或者更好: 十年来都不是这样)。如果在您的 YAML,与您的输出一样,使用ruamel.YAML时显然不是这样:

import sys
import ruamel.yaml

yaml_str = """\
root:
  matchers:
    - select: response.body#state
      test: all
      expected: on
"""

yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
expected = data['root']['matchers'][0]['expected']
print(type(expected), repr(expected))
其中:

<class 'str'> 'on'
由于这提供了准确的输入:

root:
  matchers:
    - select: "response.body#state"
      test: all
      expected: "on"
然而,更好的选择可能是您实际指定 YAML必须通过以下方式符合YAML 1.1规范: 您的意图和输出文档明确:

请注意,“unquoted”YAML 1.2输入给出了输出,其中
on
被引用:

%YAML 1.1
---
root:
  matchers:
    - select: response.body#state
      test: all
      expected: 'on'

迷人的!谢谢你的全面回复。我发现很多工具,包括Kubernetes和OpenAPI解析器,都不能正确地支持YAML 1.2布尔。例如,见。我喜欢你的例子保留引号。这允许人们在下游工具需要的情况下格式化文档,而我的处理器将保留其格式。这对用户来说应该是最小的惊喜。谢谢你的图书馆!
yaml_str = """\
root:
  matchers:
    - select: response.body#state
      test: all
      expected: on
"""

yaml_in = ruamel.yaml.YAML()
yaml_out = ruamel.yaml.YAML()
yaml_out.indent(sequence=4, offset=2)
yaml_out.version = (1, 1)
data = yaml_in.load(yaml_str)
yaml_out.dump(data, sys.stdout)
%YAML 1.1
---
root:
  matchers:
    - select: response.body#state
      test: all
      expected: 'on'