tomllib — TOML 파일 파싱

tomllib — TOML 파일 파싱

이 모듈은 TOML 1.0.0 (Tom's Obvious Minimal Language, https://toml.io) 파일을 파싱하는 인터페이스를 제공해요. 이 모듈은 TOML 작성(writing)을 지원하지 않아요. 버전 3.11에서 추가되었어요.

출처: Python documentation

본문

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

  • Tomli-W 패키지: 이 모듈과 함께 사용할 수 있는 TOML 작성기로, 표준 라이브러리 marshalpickle 모듈 사용자에게 익숙한 write API를 제공해요.
  • TOML Kit 패키지: 스타일을 보존하는 TOML 라이브러리로 읽기와 쓰기 기능을 모두 갖추고 있어요. 이미 존재하는 TOML 파일을 편집할 때는 이 모듈의 권장 대체품이에요.

함수

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

TOML 파일을 읽어요. 첫 번째 인자는 읽기 가능한 바이너리 파일 객체여야 해요. dict를 반환하고, TOML 타입을 Python으로 변환해요. 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 타입을 Python으로 변환해요. parse_float 인자는 load()에서와 같은 의미예요. 유효하지 않은 TOML 문서에서는 TOMLDecodeError가 발생해요.

예외

exceptiontomllib.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 (parse_float로 설정 가능)
boolean bool
offset date-time datetime.datetime (tzinfo 속성이 datetime.timezone 인스턴스로 설정)
local date-time datetime.datetime (tzinfo 속성이 None으로 설정)
local date datetime.date
local time datetime.time
array list
table dict
inline table dict
array of tables list of dicts

더 알아보기 (Learn more)