YAML文件中的数字键

问题描述 投票:0回答:1

有什么方法可以对YAML文件中的数字键进行字符串化?我有一个示例输入文件:

foo: bar
123: New York
food: Cheese
23.61 : max_value

我正在使用ruamel软件包来处理我的文件-加载或转储调用中是否有任何可用的东西可以执行转换,因此它看起来像:

foo: bar
'123': New York
food: Cheese
'23.61' : max_value

甚至所有键...

'foo': bar
'123': New York
'food': Cheese
'23.61': max_value

我查看了API,但看不到任何明显的内容...

yaml pyyaml ruamel.yaml
1个回答
0
投票

没有使所有键字符串成为字符串的加载选项,但是您可以在加载后使用小的递归函数来做到这一点:

import sys
import ruamel.yaml

yaml_str = """\
foo: bar
123: New York
food: Cheese
23.61 : max_value
"""

def keys2string(d):
    if isinstance(d, dict):
        for idx, k in enumerate(list(d.keys())):
            if not isinstance(k, str):
                sk = str(k)
                d.insert(idx, str(k), d.pop(k))
                k = sk
            keys2string(d[k])
    elif isinstance(d, list):
        for e in d:
            keys2string(e)


yaml = ruamel.yaml.YAML()
yaml.preserve_quotes = True
data = yaml.load(yaml_str)
keys2string(data)
yaml.dump(data, sys.stdout)

给出:

foo: bar
'123': New York
food: Cheese
'23.61': max_value

.insert()的使用是保持键顺序的一种可能方法(即,使字符串化的键代替其原始数字键)。

© www.soinside.com 2019 - 2024. All rights reserved.