有什么方法可以对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()
的使用是保持键顺序的一种可能方法(即,使字符串化的键代替其原始数字键)。