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