pythonでyamlファイルの読み込み(コンフィグファイルとして)
yamlに書いた内容が、文字列や数値がその型で取得できる。
辞書型と、リストにはいった辞書のyamlの書き方を追記。
import yaml import os import pprint # yamlファイルは、このhello_yaml.pyと同じディレクトリにある想定 default_yaml_filename = "config.yaml" class config(): def __init__(self): self.foo = None self.bar = None self.hoge = None self.piyo = None self.dics = None self.dics_list=None self.default_yaml_fullpath = os.path.dirname( os.path.abspath(__file__)) + os.sep + default_yaml_filename self.load() def load(self): try: # 念のため絶対パスでアクセス with open(self.default_yaml_fullpath,"r",encoding="utf-8") as f: y = yaml.load(stream=f, Loader=yaml.SafeLoader) self.foo = y.get("foo") self.bar = y.get("bar") self.hoge = y.get("hoge") self.piyo = y.get("piyo") self.dics = y.get("dics") self.dics_list = y.get("dics_list") except: print("error", self.default_yaml_fullpath) raise config = config() print("config.foo: {0} {1}".format(config.foo, type(config.foo))) print("config.bar: {0} {1}".format(config.bar, type(config.bar))) print("config.hoge: {0} {1}".format(config.hoge, type(config.hoge))) print("config.piyo: {0} {1}".format(config.piyo, type(config.piyo))) print("config.dics: {0} {1}".format(config.dics, type(config.dics))) pprint.pprint(config.dics) print("config.dics_list: {0} {1}".format(config.dics_list, type(config.dics_list))) pprint.pprint(config.dics_list)
config.yamlファイル(ソースコードと同じディレクトリ)
foo: foo1 bar: 100 hoge: 3.14 piyo: - piyo1 - piyo2 - 100 - 3.14 dics: x: 100 y: 200 dics_list: - a: 1111 b: 2222 - c: 3333 d: 4444
実行結果
> >python hello_yaml.py config.foo: foo1 <class 'str'> config.bar: 100 <class 'int'> config.hoge: 3.14 <class 'float'> config.piyo: ['piyo1', 'piyo2', 100, 3.14] <class 'list'> config.dics: {'x': 100, 'y': 200} <class 'dict'> {'x': 100, 'y': 200} config.dics_list: [{'a': 1111, 'b': 2222}, {'c': 3333, 'd': 4444}] <class 'list'> [{'a': 1111, 'b': 2222}, {'c': 3333, 'd': 4444}]
補足
Loader指定のないyaml.load(f)は推奨されない。y = yaml.load(stream=f, Loader=yaml.SafeLoader)に変更。
C:\dev\SampleCodes\hello_yaml\hello_yaml.py:20: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. y = yaml.load(f)