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 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))
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)
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)
참고 문서
https://pyyaml.org/wiki/PyYAMLDocumentation
https://python.land/data-processing/python-yaml
https://ko.wikipedia.org/wiki/YAML