tomllib — TOML 파일 파싱

tomllib — TOML 파일 파싱

TOML 1.0.0 (Tom's Obvious Minimal Language, https://toml.io) 을 파싱하는 인터페이스를 제공하는 모듈이에요. 파이썬 3.11에서 새로 추가됐고, TOML 작성은 지원하지 않아요.

출처: Python 표준 라이브러리 — tomllib

본문

경고: 신뢰할 수 없는 출처의 데이터를 파싱할 때는 주의하세요. 악의적인 TOML 문자열은 디코더가 상당한 CPU와 메모리 자원을 소모하게 만들 수 있어요. 파싱할 데이터의 크기를 제한하는 것을 권장합니다.

참고: Tomli-W 패키지는 이 모듈과 함께 쓸 수 있는 TOML 작성자예요. 표준 라이브러리 marshal·pickle 모듈 사용자에게 익숙한 작성 API를 제공하죠. 또 TOML Kit 패키지는 읽기·쓰기를 모두 지원하는 스타일 보존 TOML 라이브러리입니다. 이미 존재하는 TOML 파일을 편집할 때는 이 모듈 대신 TOML Kit을 쓰는 걸 권장해요.

이 모듈은 다음 함수들을 정의합니다.

tomllib.load(fp, /, *, parse_float=float)

TOML 파일을 읽어요. 첫 번째 인자는 읽기 가능한 바이너리 파일 객체여야 해요. dict를 반환하고, TOML 타입을 파이썬으로 변환할 때는 아래 변환 표를 사용합니다.

parse_float는 디코딩할 모든 TOML float의 문자열에 호출될 거예요. 기본적으로 float(num_str)과 동등합니다. 이걸 이용해 TOML float에 다른 데이터 타입이나 파서를 쓸 수 있어요 (예: decimal.Decimal). 이 콜러블이 dictlist를 반환하면 ValueError가 발생합니다.

잘못된 TOML 문서면 TOMLDecodeError가 발생해요.

tomllib.loads(s, /, *, parse_float=float)

str 객체에서 TOML을 불러와요. dict를 반환하고 아래 변환 표로 TOML 타입을 파이썬으로 변환합니다. parse_float 인자는 load()와 같은 의미예요.

잘못된 TOML 문서면 TOMLDecodeError가 발생합니다.

예외

exception tomllib.TOMLDecodeError(msg, doc, pos)

ValueError의 서브클래스로, 다음과 같은 추가 속성을 가져요.

  • msg — 형식이 지정되지 않은 오류 메시지
  • doc — 파싱 중이던 TOML 문서
  • pos — 파싱이 실패한 doc의 인덱스
  • linenopos에 해당하는 줄
  • colnopos에 해당하는 열

버전 3.14에서 변경: msg·doc·pos 매개변수가 추가되고, msg·doc·pos·lineno·colno 속성이 추가되었습니다.

버전 3.14부터 폐기(deprecated): 자유 형식 위치 인자 전달은 폐기되었습니다.

Examples (예시)

TOML 파일 파싱:

import tomllib

with open("pyproject.toml", "rb") as f:
    data = tomllib.load(f)

TOML 문자열 파싱:

import tomllib

toml_str = """
python-version = "3.11.0"
python-implementation = "CPython"
"""

data = tomllib.loads(toml_str)

Conversion Table (변환 표)

TOML Python
TOML document dict
string str
integer int
float float (configurable with parse_float)
boolean bool
offset date-time datetime.datetime (tzinfo attribute set to an instance of datetime.timezone)
local date-time datetime.datetime (tzinfo attribute set to None)
local date datetime.date
local time datetime.time
array list
table dict
inline table dict
array of tables list of dicts