Как я могу загрузить 'null' из .yml как None (класс str), а не (класс NoneType)? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть yaml, который выглядит так:

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

Я пробую PyYAML и ruamel.yaml, они оба преобразуют 'null' в None (класс NoneType).Есть ли простой способ изменить это поведение?

1 Ответ

0 голосов
/ 02 июня 2018

Вы можете использовать простую рекурсивную функцию, чтобы найти значения 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']}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...