Python TOML
last modified January 29, 2024
In this article we show how to work with TOML configuration file format in
Python. We use the tomllib module, which was introduced in Python
3.11.
TOML format
YAML (Tom's Obvious Minimal Language) is a human-readable data-serialization language. It is a minimal configuration file format that is easy to read.
TOML supports the following types:
- key/value pairs
- arrays
- tables
- inline tables
- arrays of tables
- ints and floats
- booleans
- dates and times
TOML files have the .toml extension.
Python tomllib module
This tomllib provides an interface for parsing TOML. It does not
support writing to TOML files.
The module defines two functions. The tomllib.load parses TOML from
a file. The tomllib.loads parses TOML from a string.
The following is a TOML to Python data conversion table.
| TOML | Python |
|---|---|
| table | dict |
| string | str |
| integer | int |
| float | float |
| boolean | bool |
| local date-time | datetime.datetime |
| local date | datetime.date |
| local time | datetime.time |
| array | list |
Python TOML simple example
The following is a simple TOML example.
#!/usr/bin/python
import tomllib
source = """
name = "John Doe"
occupation = "gardener"
"""
data = tomllib.loads(source)
for e in data.items():
print(e)
print('----------------------------')
for e in data.keys():
print(e)
print('----------------------------')
for e in data.values():
print(e)
In the program, we load TOML data from a string and print the loaded pairs, keys and values.
source = """ name = "John Doe" occupation = "gardener" """
In the TOML string, we define two key/value pairs.
data = tomllib.loads(source)
We load TOML data from the string with tomllib.loads.
for e in data.items(): print(e)
We iterate over the pairs using the items method.
for e in data.keys(): print(e)
We iterate over the keys using the keys method.
for e in data.values(): print(e)
Finally, we loop over the values using the values method.
$ ./simple.py
('name', 'John Doe')
('occupation', 'gardener')
----------------------------
name
occupation
----------------------------
John Doe
gardener
Python TOML read from file
We use the tomllib.load method to parse TOML from a file.
# Simple TOML document title = "Simple document" [data] enabled = true words = ['sky', 'note', 'cup', 'toast', 'falcon'] vals = [2, 3, 1, 6, 5, 3, 9]
We have a TOML file.
title = "Simple document"
This is a TOML key/value pair.
[data] enabled = true words = ['sky', 'note', 'cup', 'toast', 'falcon'] vals = [2, 3, 1, 6, 5, 3, 9]
This is a TOML table.
#!/usr/bin/python
import tomllib
fname = 'data.toml'
with open(fname, 'rb') as f:
data = tomllib.load(f)
title = data.get('title')
print(title)
enabled = data.get('data')['enabled']
print(enabled)
words = data.get('data')['words']
print(words)
vals = data['data']['vals']
print(vals)
We read the TOML data from a file.
data = tomllib.load(f)
We load the TOML data.
title = data.get('title')
We get the value of a pair with get.
enabled = data.get('data')['enabled']
From the TOML table called data, we get the enabled
value.
words = data.get('data')['words']
print(words)
From the same table, we get the words array.
$ ./read_file.py Simple document True ['sky', 'note', 'cup', 'toast', 'falcon'] [2, 3, 1, 6, 5, 3, 9]
TOML array on multiple lines
TOML arrays can span multiple lines.
words = [ "small", "cup", "forest", "toast", "mold" ]
We define a words array.
#!/usr/bin/python
import tomllib
fname = 'multiple.toml'
with open(fname, 'rb') as f:
data = tomllib.load(f)
print(data['words'])
print(data['words'][0])
print(data['words'][1])
We parse the TOML file and print the array values.
$ ./multiple.py ['small', 'cup', 'forest', 'toast', 'mold'] small cup
Python TOML type conversion
In the next example we show the TOML to Python type conversion.
married = false dob = 1999-09-20 weight = 58.5 siblings = 2 favcols = ['red', 'blue']
We have a few pairs with different types.
#!/usr/bin/python
import tomllib
fname = 'types.toml'
with open(fname, 'rb') as f:
data = tomllib.load(f)
print(type(data['married']))
print(type(data['dob']))
print(type(data['weight']))
print(type(data['siblings']))
print(type(data['favcols']))
We parse the pairs and print the Python data type of each value. We use the
built-in type function.
$ ./dtypes.py <class 'bool'> <class 'datetime.date'> <class 'float'> <class 'int'> <class 'list'>
Python TOML decode error
A TOMLDecodeError is raised if a TOML document is invalid.
#!/usr/bin/python
import tomllib
source = """
name = "John Doe"
occupation: "gardener"
"""
try:
data = tomllib.loads(source)
name = data['name']
occupation = data['occupation']
print(name)
print(occupation)
except tomllib.TOMLDecodeError as e:
print('Invalid TOML document')
print(e)
In the example, we parse an invalid TOML document in a string.
$ ./decode_error.py Invalid TOML document Expected '=' after a key in a key/value pair (at line 3, column 11)
Source
Python tomllib — Parse TOML files
In this article we have worked with the TOML format in Python.
Author
List all Python tutorials.