tomllib — TOML-Dateien parsen¶
Quellcode: Lib/tomllib
Dieses Modul bietet eine Schnittstelle zum Parsen von TOML 1.1.0 (Tom’s Obvious Minimal Language, https://toml.io). Das Schreiben von TOML unterstützt dieses Modul nicht.
Added in version 3.11: Das Modul wurde mit Unterstützung für TOML 1.0.0 hinzugefügt.
Geändert in Version 3.15: Unterstützung für TOML 1.1.0 hinzugefügt. Einzelheiten unter Was ist neu.
Warnung
Sei vorsichtig beim Parsen von Daten aus nicht vertrauenswürdigen Quellen. Eine bösartige TOML-Zeichenkette kann den Decoder dazu bringen, erhebliche CPU- und Speicherressourcen zu verbrauchen. Es empfiehlt sich, die Größe der zu parsenden Daten zu begrenzen.
Siehe auch
Das Paket Tomli-W ist ein TOML-Schreiber, der sich zusammen mit diesem Modul verwenden lässt. Es bietet eine Schreib-API, die Nutzern der Standardbibliotheksmodule marshal und pickle vertraut ist.
Siehe auch
Das Paket TOML Kit ist eine stilerhaltende TOML-Bibliothek, die sowohl lesen als auch schreiben kann. Für das Bearbeiten bereits vorhandener TOML-Dateien ist es der empfohlene Ersatz für dieses Modul.
Dieses Modul definiert die folgenden Funktionen:
- tomllib.load(fp, /, *, parse_float=float)¶
Liest eine TOML-Datei. Das erste Argument sollte ein lesbares, binäres Dateiobjekt sein. Gibt ein
dictzurück. Wandelt TOML-Typen anhand dieser Umwandlungstabelle nach Python um.parse_float wird mit der Zeichenkette jeder zu dekodierenden TOML-Gleitkommazahl aufgerufen. Voreingestellt entspricht das
float(num_str). Damit lässt sich ein anderer Datentyp oder Parser für TOML-Gleitkommazahlen verwenden (z. B.decimal.Decimal). Das aufrufbare Objekt darf keindictund keinelistzurückgeben, sonst wirdValueErrorausgelöst.Bei einem ungültigen TOML-Dokument wird
TOMLDecodeErrorausgelöst.
- tomllib.loads(s, /, *, parse_float=float)¶
Lädt TOML aus einem
str-Objekt. Gibt eindictzurück. Wandelt TOML-Typen anhand dieser Umwandlungstabelle nach Python um. Das Argument parse_float hat dieselbe Bedeutung wie beiload().Bei einem ungültigen TOML-Dokument wird
TOMLDecodeErrorausgelöst.
Die folgenden Ausnahmen stehen zur Verfügung:
- exception tomllib.TOMLDecodeError(msg, doc, pos)¶
Unterklasse von
ValueErrormit den folgenden zusätzlichen Attributen:- msg¶
Die unformatierte Fehlermeldung.
- doc¶
Das TOML-Dokument, das geparst wird.
- pos¶
Der Index in doc, an dem das Parsen fehlgeschlagen ist.
- lineno¶
Die Zeile, die pos entspricht.
- colno¶
Die Spalte, die pos entspricht.
Geändert in Version 3.14: Die Parameter msg, doc und pos wurden hinzugefügt. Die Attribute
msg,doc,pos,linenoundcolnowurden hinzugefügt.Veraltet ab Version 3.14: Das Übergeben formfreier Positionsargumente ist veraltet.
Beispiele¶
Eine TOML-Datei parsen:
import tomllib
with open("pyproject.toml", "rb") as f:
data = tomllib.load(f)
Eine TOML-Zeichenkette parsen:
import tomllib
toml_str = """
python-version = "3.11.0"
python-implementation = "CPython"
"""
data = tomllib.loads(toml_str)
Umwandlungstabelle¶
TOML |
Python |
|---|---|
TOML-Dokument |
dict |
Zeichenkette |
str |
Ganzzahl |
int |
float |
float (über parse_float einstellbar) |
boolescher Wert |
bool |
Datum und Uhrzeit mit Zeitzonenversatz |
datetime.datetime (Attribut |
lokales Datum mit Uhrzeit |
datetime.datetime (Attribut |
lokales Datum |
datetime.date |
lokale Uhrzeit |
datetime.time |
Array |
Liste |
Tabelle |
dict |
Inline-Tabelle |
dict |
Array von Tabellen |
list of dicts |
Grenzen und Hinweise zur Interoperabilität¶
tomllib setzt den Dokumenten, die es verarbeiten kann, einige Grenzen und bewahrt Einzelheiten, die andere TOML-Parser ignorieren dürfen. Verwende beim Schreiben portabler TOML-Dateien nur Features, die der Standard zusichert oder empfiehlt.
Die hier aufgeführten Einzelheiten der Umsetzung können sich in künftigen Python-Versionen ändern.
- Tabellen/Dictionarys
Die TOML-Spezifikation sichert nicht zu, dass Schlüssel-Wert-Paare in TOML-Dokumenten und Tabellen in einer bestimmten Reihenfolge stehen.
tomlliblädt Dictionary-Einträge in der Reihenfolge, in der sie in der Quelle stehen.- Ganze Zahlen
TOML empfiehlt, ganze Zahlen im Bereich
range(-2**63, 2**63)zu unterstützen.tomllibverwendet Pythons Grenze für die Umwandlung ganzer Zahlen in Zeichenketten (voreingestellt 4300 Stellen).- Gleitkommazahlen
TOML empfiehlt, mindestens Werte nach IEEE 754 binary64 zu unterstützen. Zahlen mit mehr als 15 signifikanten Dezimalstellen werden daher wahrscheinlich gerundet.
tomllibverwendet voreingestellt Pythonsfloat. Auf vielen verbreiteten Plattformen ist das das empfohlene binary64. Näheres untersys.float_info.- Verschachtelungsgrenze
TOML 1.1.0 empfiehlt keine Grenze dafür, wie tief Arrays und Tabellen ineinander verschachtelt sein dürfen. (Für eine künftige TOML-Version ist eine Grenze von 100 vorgeschlagen.)
In
tomllibwird die Verschachtelungstiefe im Wesentlichen durch PythonsRekursionsgrenzebegrenzt. Beachte, dass auch Code, dertomllibaufruft, zu dieser Grenze beiträgt.