1. ホーム
  2. python

[解決済み] YAMLファイルをパースしてPythonのオブジェクトに読み込むには?

2022-09-16 06:21:28

質問

YAMLファイルをパースしてPythonオブジェクトに読み込むにはどうしたらよいですか?

例えば、このYAML。

Person:
  name: XYZ

このPythonのクラスへ

class Person(yaml.YAMLObject):
  yaml_tag = 'Person'

  def __init__(self, name):
    self.name = name

ちなみに私はPyYAMLを使っています。

どのように解決するのですか?

YAMLファイルが以下のような場合。

# tree format
treeroot:
    branch1:
        name: Node 1
        branch1-1:
            name: Node 1-1
    branch2:
        name: Node 2
        branch2-1:
            name: Node 2-1

そして、インストールした PyYAML をこのようにします。

pip install PyYAML

そして、Pythonのコードはこのようになります。

import yaml
with open('tree.yaml') as f:
    # use safe_load instead load
    dataMap = yaml.safe_load(f)

変数 dataMap という変数には、ツリーデータを含む辞書が格納されています。もし dataMap をPrettyPrintで印刷すると、次のようなものが得られます。

{
    'treeroot': {
        'branch1': {
            'branch1-1': {
                'name': 'Node 1-1'
            },
            'name': 'Node 1'
        },
        'branch2': {
            'branch2-1': {
                'name': 'Node 2-1'
            },
            'name': 'Node 2'
        }
    }
}

さて、ここまでで、Pythonプログラムにデータを取り込む方法を見ました。データの保存も同じように簡単です。

with open('newtree.yaml', "w") as f:
    yaml.dump(dataMap, f)

辞書ができたので、今度はそれをPythonのオブジェクトに変換しなければなりません。

class Struct:
    def __init__(self, **entries): 
        self.__dict__.update(entries)

なら、使える。

>>> args = your YAML dictionary
>>> s = Struct(**args)
>>> s
<__main__.Struct instance at 0x01D6A738>
>>> s...

をクリックし、"をフォローします。 Pythonのdictをオブジェクトに変換する "です。

より詳細な情報については pyyaml.org この .