Модуль tomli-w
предназначен только для записи файлов TOML или редактирования имеющихся TOML, полностью совместим с TOML v1.0.0. Представляет собой аналог стандартного модуля tomlib
, который является синтаксическим анализатором TOML только для чтения.
Особенности модуля tomli-w
:
dict
в документ TOML данные не сортируются, но соблюдаются порядок сортировки входных данных, поэтому можно отсортировать содержимое dict
(рекурсивно) перед вызовом функции tomli_w.dumps()
.Если многострочная строка содержит новые строки \n
и/или \r
то модуль ее не запишет.
Такое поведение по умолчанию было выбрано для обеспечения циклического анализа/записи без потерь. Строки TOML могут содержать новые строки, где важны точные байты, например:
s = "here's a newline\r\n"
Строки TOML также могут содержать новые строки, где точное представление байтов не имеет значения, например:
s = """here's a newline """
Циклический анализ/запись, который преобразует первый пример во второй, не сохраняет исходную последовательность байтов новой строки. Вот почему модуль tomli-w
избегает запись многострочных строк.
Для пользователей, которым не нужно сохранять байты новой строки предоставляется ключевой аргумент multiline_strings
:
import tomli_w doc = {"s": "here's a newline\r\n"} expected_toml = '''\ s = """ here's a newline """ ''' assert tomli_w.dumps(doc, multiline_strings=True) == expected_toml
tomli-w
в виртуальное окружение.Модуль tomli-w
размещен на PyPI, поэтому установка относительно проста.
# создаем виртуальное окружение, если нет $ python3 -m venv .venv --prompt VirtualEnv # активируем виртуальное окружение $ source .venv/bin/activate # ставим модуль tomli-w (VirtualEnv):~$ python3 -m pip install -U tomli-w
tomli_w
.import tomli_w doc = {"table": {"nested": {}, "val3": 3}, "val2": 2, "val1": 1} expected_toml = """\ val2 = 2 val1 = 1 [table] val3 = 3 [table.nested] """ assert tomli_w.dumps(doc) == expected_toml
import tomli_w doc = {"one": 1, "two": 2, "pi": 3} with open("path_to_file/conf.toml", "wb") as fp: tomli_w.dump(doc, fp)