Python

[Python] yaml 데이터 다루기

비번변경 2022. 10. 28. 22:57

YAML

사람이 쉽게 읽을 수 있는 데이터 직렬화 양식으로, "YAML은 마크업 언어가 아니다 (YAML Ain't Markup Language)”라는 재귀적인 이름에서 유래되었다.

파일 확장자는 .yaml, .yml을 사용한다.

2021.11.01 - [Python] JSON 데이터 다루기, 2022.10.21 - [Python] CSV 데이터 다루기에 이어서 이번 글에서는 yaml 데이터를 다루는 방법을 정리해둔다.

이 글에서는 YAML 1.1(2005 ~ )을 지원하는 PyYAML을 사용할 것이다. YAML 1.2(2009 ~ )은 ruamel.yaml을 사용해야 한다.

 

PyYAML 설치 및 임포트

기본 내장 라이브러리가 아니므로 아래 명령어로 설치한 뒤, import 하여 사용한다.

pip install pyyaml

import는 yaml 이라는 이름으로 한다.

import yaml

 

 

YAML 읽기

yaml.load, yaml.safe_load 함수는 YAML 데이터를 Python Dictionary 형 데이터로 변환한다. 변환할 YAML 데이터는 꼭 파일 객체가 아니어도 된다. yaml 형식의 문자열 데이터도 변환할 수 있다.

import yaml

# load
with open('test.yaml') as f:
    yaml_data = yaml.load(f, Loader=yaml.SafeLoader)
print(yaml_data)


# safe_load
str_data = """
            developer:
                - june
                - hello
                - world
            """
yaml_data = yaml.safe_load(str_data)
print(yaml_data)

load, safe_load

 

💡 load VS safe_load
load 함수에서 사용할 수 있는 yaml.Loader는 임의의 파이썬 코드를 실행할 수 있기 때문에 안전하지 않다. 이를 피하기 위해 yaml.SafeLoader를 기본적으로 사용하는 safe_load 함수를 사용하는 것은 권장하고 있다.

 

 

YAML 쓰기

dump, safe_dump 함수를 이용하면 python 객체로 yaml 형식의 데이터를 생성할 수 있다.

import yaml

d = {'developer': ['june', 'hello', 'world']}
print(yaml.dump(yaml_data))

dump

 

YAML 파일에 쓰기

dump, safe_dump 함수의 두 번째 매개변수로 파일 객체를 전달하면 생성한 yaml 데이터를 파일에 쓸 수 있다.

import yaml

d = {'developer': ['june', 'hello', 'world']}

with open('test.yaml', 'w') as f:
    yaml.safe_dump(yaml_data, f)

safe_dump

 

yaml 형식의 문자열 데이터는 python 객체로 load 한 뒤, dump 함수로 작성하면 된다.

import yaml

str_data = """
            developer:
                - june
                - hello
                - world
            """
yaml_data = yaml.safe_load(str_data)

with open('test.yaml', 'w') as f:
    yaml.safe_dump(yaml_data, f)

문자열 데이터 dump

 

 

참고 문서

https://pyyaml.org/wiki/PyYAMLDocumentation

https://python.land/data-processing/python-yaml

https://ko.wikipedia.org/wiki/YAML