如何使用 Python 的 PyYAML 在 YAML 中的数字组之间添加 _

How to add _ between group of digits in YAML using Python's PyYAML

在 Python 中,您可以通过在数字组之间添加 _ 来提高数字的可读性:

x = 1_234_567

但是使用 YAML 进行转储不会产生同样的效果:

import yaml
yaml.dump(1_234_567) # => "1234567"

我可以让 PyYAML 打印数字并很好地分组数字吗?

您可以通过添加 representer:

为任何类型自定义 PyYAML 的行为
import re
import yaml

def pretty_print_int(n):
    return re.sub(r"(?!^)(?=(?:...)+$)", "_", str(n))

def represent_int(dumper, data):
    return dumper.represent_scalar("tag:yaml.org,2002:int", pretty_print_int(data))

yaml.add_representer(int, represent_int)

神奇的 tag:yaml.org,2002:int 值取自 YAML spec 并为 PyYAML 所知。

PyYAML 将成功加载生成的 YAML。使用下划线格式化数字符合 YAML 1.1 spec 但不符合 YAML 1.2 规范,因此其他一些解析器可能会遇到问题。