http://pyyaml.orgのYAMLパーサーを使用していて、特定のフィールドを常に文字列として解釈したいのですが、add_path_resolver()がどのように機能するか理解できません。
例:パーサーは、「バージョン」がフロートであると想定します。
network:
- name: apple
- name: orange
version: 2.3
site: banana
一部のファイルには、「バージョン:2」(intとして解釈される)または「バージョン:2.3 alpha」(strとして解釈される)があります。
常にstrとして解釈してほしい。
yaml.add_path_resolver()で、「version:が表示されたら、常にstrとして解釈してください)と指定する必要があるようですが、十分に文書化されていません。私の推測は次のとおりです。
yaml.add_path_resolver(u'!root', ['version'], kind=str)
しかし、それはうまくいきません。
バージョンフィールドを常に文字列にする方法についての提案はありますか?
PSさまざまな「バージョン」文字列の例と、それらがどのように解釈されるかを次に示します。
(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'}