Используйте default_flow_style=False
Например:
import yaml
job_template = [
{
"job-template": {
"name": "{name}_job",
"description": "job description",
"project-type": "multibranch",
"number-to-keep": 30,
"days-to-keep": 30,
"scm": [
{
"git": {
"url": "{git_url}"
}
}
]
}
}
]
yaml.dump(job_template, open("job_template.yaml", "w"), default_flow_style=False)
Если я понял Ваш вопрос правильно, Вы знали структуру данных, и Вы изменяете данные - не структура XML файла.
Под ними обусловливают и если производительность крайне важна, то Вы могли попробовать управлением простым текстом - пропускают парсинг XML.
Читайте из потока, используйте некоторый быстрый текстовый алгоритм поиска, например, Boyer-Moore, для нахождения мест, где необходимо изменить данные, сделайте модификацию и выходные данные в другой поток.
Это было бы одной передачей, никаким парсингом XML, никаким зданием дерева XML в оперативной памяти.
SAX достоин рассмотрения вместо синтаксического анализатора DOM.
С DOM Вы платите издержки загрузки документа, но когда-то к загруженным данным можно получить доступ и обновить быстро.
С SAX необходимо записать обработчики для начинать-элемента, элемента конца, и т.д., но у Вас есть намного больше гибкости в том, что Вы делаете, как Вы продвигаетесь.
Хотя это, вероятно, не помогает Вашей ситуации, SAX очень полезен, где Вы ищете, потому что можно остановить парсинг в любой точке, поэтому после того как Вы нашли то, что Вы хотели Вас, может остановиться.
Если Ваша программа не должна анализировать все данные, прежде чем это будет знать, какие изменения сделать, Вы могли записать обработчикам SAX, которые просто обновили данные, когда это было считано и иначе передало его через, таким образом, это передаст данные потоком вместо того, чтобы иметь необходимость загрузить все это в любой вид структуры памяти. Это сделало бы решение очень масштабируемым как Вы ограничения памяти хита привычки с очень большими файлами.
Если это имеет значение я склонен использовать синтаксические анализаторы SAX и MSXML DOM. Можно утверждать, что они не лучшее выполнение, я утверждаю, что существует, вероятно, больше людей, работающих над улучшением их, таким образом, они поправятся и лучше.
Вы могли бы хотеть взглянуть на компонент DIHtmlParser от Вдохновения Delphi. Это, как предполагается, "чрезвычайно быстро, особенно при парсинге огромных файлов", и "на современных машинах счет подходит больше чем к 15 МБ данных HTML в секунду". У меня был некоторый довольно хороший опыт с ним, хотя я никогда не пробовал его огромными файлами.
Я не специалист, но я полагаю, что согласие состоит в том, что синтаксический анализатор SAX будет намного более эффективным, чем DOM...
Я очень удовлетворен NativeXML от SimDesign. Это также включает специальную версию под названием FastXML, который я еще не протестировал, но сказан быть, ну, в общем, быстрым.
Другая возможность, которую я просто обнаружил, с пакетом LMD ElPack, который я купил, они включают библиотеку поддержки XML, которую они говорят, "является чрезвычайно быстрым, полностью unicode-поддерживающим и добавляет только маленькое место к Вашим EXE-файлам".
Рассмотрение источника их единицы LMDXML.pas включало в пакет LMD 7 (для Delphi 2009), это говорит, что код основан на Выпуске 8.0 SimpleXML (июль 2006) код Michail Vlasov.
Если Вы когда-нибудь считаете управляемый событиями SAX путем, библиотека XML Parser могла бы приехать довольно удобная.
Если вам нужны только прямые манипуляции, я бы согласился с ответом zendar.
Что касается реализации DOM или SAX, я бы порекомендовал DIXml .