YAML文件中的数字键

YAML文件中的数字键,yaml,pyyaml,ruamel.yaml,Yaml,Pyyaml,Ruamel.yaml,有没有办法在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': C

有没有办法在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,但看不到任何明显的内容…

没有使所有键都成为字符串的加载选项,但您可以在加载一个小递归函数后执行此操作:

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()
是保留键顺序的一种可能方法(即,将字符串化键置于其原始数字键的位置)。

没有使所有键都成为字符串的加载选项,但您可以在加载后使用一个小的递归函数:

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()
是保留键顺序的一种可能方法(即,将字符串化键替换为其原始数字键)