1. 라이브러리 설치

pip install PyYAML

 

 

2. 사용법

PyYAML을 설치후 import하여 아래와 같이 사용할 수 있다. 반환된 data 변수는 dictionary 타입을 가진다.

import yaml

yaml_path = "./settings.yaml"

with open(yaml_path, "r") as f:
    data = yaml.safe_load(f)

batch_size = data['hyperparameters']['BatchSize']
print(f"batch_size: {batch_size}")
>> 출력
batch_size: 32

 

 

2.1 dictionary를 argparse.Namespace()를 사용해서 편하게 사용하기

Namespace는 argparse 내부에 있는 클래스로 attribute를 저장하기 위해 사용하는 간단한 오브젝트이다. 해당 오브젝트를 사용하여 dict를 편하게 사용할 수 있도록 변경할 수 있다.

 

def dict2namespace(config):
    namespace = argparse.Namespace()
    for key, value in config.items():
        if isinstance(value, dict):
            new_value = dict2namespace(value)
        else:
            new_value = value
        setattr(namespace, key, new_value)
    return namespace

setattr은 첫 번째 매개변수로 주어진 객체에서 key값을 new_value로 변경한다.

 

 

전체 사용 예시 코드

import yaml
import argparse


def dict2namespace(config):
    namespace = argparse.Namespace()
    for key, value in config.items():
        if isinstance(value, dict):
            new_value = dict2namespace(value)
        else:
            new_value = value
        setattr(namespace, key, new_value)
    return namespace


if __name__ == "__main__":
    yaml_path = "./settings.yaml"

    with open(yaml_path, "r") as f:
        config = yaml.safe_load(f)

    new_config = dict2namespace(config)
    batch_size = new_config.hyperparameters.BatchSize
    print(f"batch size: {batch_size}")

 

 

 

참고자료

https://docs.python.org/ko/3/library/argparse.html#the-namespace-object