【问题标题】:Numeric keys in YAML filesYAML 文件中的数字键
【发布时间】:2020-09-23 15:48:56
【问题描述】:

有什么方法可以对 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】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 1970-01-01
      • 2022-07-25
      • 1970-01-01
      • 2019-01-08
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多