Я использую синтаксический анализатор YAML из http://pyyaml.org и хочу, чтобы он всегда интерпретировал определенные поля как строки, но я не могу понять, как работает add_path_resolver ().
Например: синтаксический анализатор предполагает, что «версия» является плавающей точкой:
network:
- name: apple
- name: orange
version: 2.3
site: banana
У некоторых файлов есть «версия: 2» (что интерпретируется как int) или «версия: 2.3 альфа» (что интерпретируется как str).
Я хочу, чтобы их всегда интерпретировали как ул.
Кажется, что yaml.add_path_resolver () должен позволить мне указать: «Когда вы видите версию: всегда интерпретируйте ее как str), но она не очень хорошо документирована. Мой лучший выбор:
yaml.add_path_resolver(u'!root', ['version'], kind=str)
Но это не работает.
Предложения о том, как сделать так, чтобы поле моей версии всегда было строкой?
P.S. Вот несколько примеров различных строк «version» и их интерпретация:
(Pdb) import yaml
(Pdb) import pprint
(Pdb) pprint.pprint(yaml.load("---\nnetwork:\n- name: apple\n- name: orange\nversion: 2\nsite: banana"))
{'network': [{'name': 'apple'}, {'name': 'orange'}],
'site': 'banana',
'version': 2}
(Pdb) pprint.pprint(yaml.load("---\nnetwork:\n- name: apple\n- name: orange\nversion: 2.3\nsite: banana"))
{'network': [{'name': 'apple'}, {'name': 'orange'}],
'site': 'banana',
'version': 2.2999999999999998}
(Pdb) pprint.pprint(yaml.load("---\nnetwork:\n- name: apple\n- name: orange\nversion: 2.3 alpha\nsite: banana"))
{'network': [{'name': 'apple'}, {'name': 'orange'}],
'site': 'banana',
'version': '2.3 alpha'}