Tips & Traps¶
Please refer to Parse TOML File in Python for general tips on parsing TOML in Python.
Installatoion¶
pip3 install tomlDefaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: toml in /usr/local/lib/python3.8/dist-packages (0.10.2)
Parse TOML from a String¶
import tomltoml_string = """
# This is a TOML document.
title = "TOML Example"
[owner.info]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # First class dates
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true
[servers]
[servers.alpha]
ip = "10.0.0.1"
dc = "eqdc10"
[servers.beta]
ip = "10.0.0.2"
dc = "eqdc10"
[clients]
data = [ ["gamma", "delta"], [1, 2] ]
# Line breaks are OK when inside arrays
hosts = [
"alpha",
"omega"
]
"""dic = toml.loads(toml_string)
dic{'title': 'TOML Example',
'owner': {'info': {'name': 'Tom Preston-Werner',
'dob': datetime.datetime(1979, 5, 27, 7, 32, tzinfo=<toml.tz.TomlTz object at 0x7f3d687e93d0>)}},
'database': {'server': '192.168.1.1',
'ports': [8001, 8001, 8002],
'connection_max': 5000,
'enabled': True},
'servers': {'alpha': {'ip': '10.0.0.1', 'dc': 'eqdc10'},
'beta': {'ip': '10.0.0.2', 'dc': 'eqdc10'}},
'clients': {'data': [['gamma', 'delta'], [1, 2]],
'hosts': ['alpha', 'omega']}}dic = toml.load(Path("pyproject.toml").open())
dic{'tool': {'poetry': {'name': 'xinstall',
'version': '0.51.1',
'description': 'Easy Cross-platform Installation and Configuration of Apps.',
'authors': ['Benjamin Du <longendu@yahoo.com>'],
'license': 'MIT',
'readme': 'readme.md',
'repository': 'https://github.com/legendu-net/xinstall',
'keywords': ['installation', 'configuration', 'cross-platform'],
'scripts': {'xinstall': 'xinstall:main.main'},
'dependencies': {'python': '>=3.7.1,<4',
'distro': '>=1.5.0',
'tqdm': '>=4.48.2',
'findspark': '>=1.4.2',
'requests': '>=2.25.0',
'packaging': '>=20.4',
'tomlkit': '>=0.7.0',
'dulwich': '>=0.20.24'},
'dev-dependencies': {'pytest': '>=3.0',
'pylint': '>=2.4.4',
'pytype': {'version': '>=2020.08.10', 'python': '<3.9'},
'yapf': '>=0.32.0',
'coverage': '>=5.3',
'deepdiff': '>=5.2.3'}},
'pylint': {'master': {'ignore': '.venv,.ipynb_checkpoints',
'unsafe-load-any-extension': 'no',
'load-plugins': 'pylint.extensions.docparams',
'extension-pkg-whitelist': 'numpy,cv2,pyspark',
'generated-members': 'sqlite3.*,cv2.*,pyspark.*',
'ignored-modules': 'pyspark.sql.functions'},
'messages_control': {'disable': 'C0103,C0200,C0301,C0302,C0303,C0330,R0801,R0902,R0903,R0904,R0911,R0912,R0913,R0914,W0621,W0622,W0702,W0703,W1116,W9012,W9016'},
'typecheck': {'ignored-classes': 'Namespace'}},
'yapf': {'based_on_style': 'facebook', 'column_limit': '88'},
'yapfignore': {'ignore_patterns': ['*/.ipynb_checkpoints/']}},
'build-system': {'requires': ['poetry>=1.0.0'],
'build-backend': 'poetry.masonry.api'}}print(toml.dumps(dic))[build-system]
requires = [ "poetry>=1.0.0",]
build-backend = "poetry.masonry.api"
[tool.poetry]
name = "xinstall"
version = "0.51.1"
description = "Easy Cross-platform Installation and Configuration of Apps."
authors = [ "Benjamin Du <longendu@yahoo.com>",]
license = "MIT"
readme = "readme.md"
repository = "https://github.com/legendu-net/xinstall"
keywords = [ "installation", "configuration", "cross-platform",]
[tool.yapf]
based_on_style = "facebook"
column_limit = "88"
[tool.yapfignore]
ignore_patterns = [ "*/.ipynb_checkpoints/",]
[tool.poetry.scripts]
xinstall = "xinstall:main.main"
[tool.poetry.dependencies]
python = ">=3.7.1,<4"
distro = ">=1.5.0"
tqdm = ">=4.48.2"
findspark = ">=1.4.2"
requests = ">=2.25.0"
packaging = ">=20.4"
tomlkit = ">=0.7.0"
dulwich = ">=0.20.24"
[tool.poetry.dev-dependencies]
pytest = ">=3.0"
pylint = ">=2.4.4"
yapf = ">=0.32.0"
coverage = ">=5.3"
deepdiff = ">=5.2.3"
[tool.pylint.master]
ignore = ".venv,.ipynb_checkpoints"
unsafe-load-any-extension = "no"
load-plugins = "pylint.extensions.docparams"
extension-pkg-whitelist = "numpy,cv2,pyspark"
generated-members = "sqlite3.*,cv2.*,pyspark.*"
ignored-modules = "pyspark.sql.functions"
[tool.pylint.messages_control]
disable = "C0103,C0200,C0301,C0302,C0303,C0330,R0801,R0902,R0903,R0904,R0911,R0912,R0913,R0914,W0621,W0622,W0702,W0703,W1116,W9012,W9016"
[tool.pylint.typecheck]
ignored-classes = "Namespace"
[tool.poetry.dev-dependencies.pytype]
version = ">=2020.08.10"
python = "<3.9"
Parse TOML from a File¶
with open("example.toml", "r") as fin:
dic = toml.load(fin)
dic{'title': 'TOML Example',
'database': {'server': '192.168.1.1',
'ports': [8001, 8001, 8002],
'connection_max': 5000,
'enabled': True},
'clients': {'data': [['gamma', 'delta'], [1, 2]],
'hosts': ['alpha', 'omega']},
'owner': {'info': {'name': 'Tom Preston-Werner',
'dob': datetime.datetime(1979, 5, 27, 7, 32, tzinfo=<toml.tz.TomlTz object at 0x11f7b7490>)}},
'servers': {'alpha': {'ip': '10.0.0.1', 'dc': 'eqdc10'},
'beta': {'ip': '10.0.0.2', 'dc': 'eqdc10'}}}Dump an Object to a TOML String¶
with open("example.toml", "r") as fin:
dic = toml.load(fin)print(toml.dumps(dic))title = "TOML Example"
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002,]
connection_max = 5000
enabled = true
[clients]
data = [ [ "gamma", "delta",], [ 1, 2,],]
hosts = [ "alpha", "omega",]
[owner.info]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00
[servers.alpha]
ip = "10.0.0.1"
dc = "eqdc10"
[servers.beta]
ip = "10.0.0.2"
dc = "eqdc10"
Dump an Object to a TOML File¶
with open("example.toml", "r") as fin:
dic = toml.load(fin)with open("/tmp/example.toml", "w") as fout:
toml.dump(dic, fout)