Сообщить об ошибке.

Модуль tomli-w в Python, запись документов TOML

Сохранение документов TOML в файл или строку

Модуль tomli-w предназначен только для записи файлов TOML или редактирования имеющихся TOML, полностью совместим с TOML v1.0.0. Представляет собой аналог стандартного модуля tomlib, который является синтаксическим анализатором TOML только для чтения.

Особенности модуля tomli-w:

  • При преобразовании словаря dict в документ TOML данные не сортируются, но соблюдаются порядок сортировки входных данных, поэтому можно отсортировать содержимое dict (рекурсивно) перед вызовом функции tomli_w.dumps().
  • Запись документов TOML с комментариями или пользовательскими пробелами не поддерживается.
  • Если многострочная строка содержит новые строки \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.

Запись документа TOML в строку:

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

Запись документа 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)