当前位置: 首页 > 面试题库 >

如何控制PyYAML用于数据的标量形式?

卞琨
2023-03-14
问题内容

我有一个带有短字符串属性和长多行字符串属性的对象。我想将短字符串写为YAML引用标量,将多行字符串写为文字标量:

my_obj.short = "Hello"
my_obj.long = "Line1\nLine2\nLine3"

我希望YAML看起来像这样:

short: "Hello"
long: |
  Line1
  Line2
  Line3

我该如何指示PyYAML执行此操作?如果我调用yaml.dump(my_obj),它将产生类似dict的输出:

{long: 'line1

    line2

    line3

    ', short: Hello}

(不知道为什么长距离是这样的两倍…)

我可以要求PyYAML如何处理我的属性吗?我想同时影响顺序和样式。


问题答案:

基于Python中是否有支持将长字符串转储为块文字或折叠块的yaml库?

import yaml
from collections import OrderedDict

class quoted(str):
    pass

def quoted_presenter(dumper, data):
    return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='"')
yaml.add_representer(quoted, quoted_presenter)

class literal(str):
    pass

def literal_presenter(dumper, data):
    return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|')
yaml.add_representer(literal, literal_presenter)

def ordered_dict_presenter(dumper, data):
    return dumper.represent_dict(data.items())
yaml.add_representer(OrderedDict, ordered_dict_presenter)

d = OrderedDict(short=quoted("Hello"), long=literal("Line1\nLine2\nLine3\n"))

print(yaml.dump(d))

输出量

short: "Hello"
long: |
  Line1
  Line2
  Line3


 类似资料:
  • 我想为一个项目安装PyYAML,我能找到的只是http://pyyaml.org/站点的链接。我下载了python 3.5 exe文件,上面写着“需要Python 3.5版本,在注册表中找不到” 我搜索了其他安装方法。我在堆栈溢出上找到的唯一一个是“$pip install pyyaml”。它没有说明应该在哪里使用命令来安装包。

  • 我有一个报告生成应用程序。由于这类报告的准备是重量级的,因此它们是用Spring Batch异步准备的。对此类报告的请求是通过使用HTTP的REST接口创建的。 目标是REST资源只需对报告执行进行排队并完成(如文档中所述)。因此,为JobLauncher提供了一个TaskExecutor: 由于报告确实是重量级的,在给定的时间内只能生成特定数量的报告。为了能够将Spring Batch配置为一次

  • 问题内容: 标签标签没有属性’width’,那么我应该如何控制标签标签的宽度? 问题答案: 当然,使用CSS … 不推荐使用该属性,并且应始终使用CSS来控制这些类型的表示样式。

  • 有没有办法使用hadoop流作业将这20,000个文件合并到10,000个文件?或者,换句话说,有没有办法控制hadoop流式输出文件的数量? 提前感谢!

  • 本文向大家介绍基于Python和PyYAML读取yaml配置文件数据,包括了基于Python和PyYAML读取yaml配置文件数据的使用技巧和注意事项,需要的朋友参考一下 一、首先我们需要安装 PyYAML 第三方库 直接使用 pip install PyYAML 就可以(这里我之前是装过的,所以提示我PyYAML已经在这个目录下了,是5.1.2版本的) 二、先看一下我的yaml配置文件中数据的格