如何加载' null' from .yml as None(class str),not(class NoneType)?

时间:2018-06-02 15:21:05

标签: python python-3.x yaml

我的yaml看起来像这样:

  SomeRecord:
    type: array
    items:
      type:
        - string
        - number
        - null

我尝试PyYAML和ruamel.yaml他们都将'null'转换为None(类NoneType)。 有没有简单的方法来改变这种行为?

1 个答案:

答案 0 :(得分:1)

您可以使用简单的递归函数来查找None值并将其转换为'None',如下所示:

代码:

def convert_none_to_str(data):
    if isinstance(data, list):
        data[:] = [convert_none_to_str(i) for i in data]
    elif isinstance(data, dict):
        for k, v in data.items():
            data[k] = convert_none_to_str(v)
    return 'None' if data is None else data

测试代码:

yaml_data = """    
  SomeRecord:
    type: array
    items:
      type:
        - string
        - number
        - null
"""

import yaml
data = yaml.safe_load(yaml_data)
print(data)
convert_none_to_str(data)
print(data)

结果:

{'SomeRecord': {'type': 'array', 'items': {'type': ['string', 'number', None]}}}
{'SomeRecord': {'type': 'array', 'items': {'type': ['string', 'number', 'None']}}}