tomllib — TOML 파일 파싱
tomllib — TOML 파일 파싱
이 모듈은 TOML 1.0.0 (Tom's Obvious Minimal Language, https://toml.io) 파일을 파싱하는 인터페이스를 제공해요. 이 모듈은 TOML 작성(writing)을 지원하지 않아요. 버전 3.11에서 추가되었어요.
본문
경고: 신뢰할 수 없는 소스의 데이터를 파싱할 때는 주의하세요. 악의적인 TOML 문자열은 디코더가 상당한 CPU와 메모리 자원을 소비하게 만들 수 있어요. 파싱할 데이터의 크기를 제한하는 것이 권장돼요.
- Tomli-W 패키지: 이 모듈과 함께 사용할 수 있는 TOML 작성기로, 표준 라이브러리
marshal과pickle모듈 사용자에게 익숙한 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)를 사용하는 데 활용할 수 있어요. 호출 가능 객체가 dict나 list를 반환하면 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의 인덱스lineno—pos에 해당하는 줄colno—pos에 해당하는 열
버전 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 |