Вы можете заставить дампер использовать одинарные кавычки, когда скаляр можно представить с помощью строк в одинарных кавычках, указав параметр default_style="'"
.
Это не гарантирует получение одинарных кавычек, хотя одинарные кавычкине может выполнить escape-последовательности, которые есть в двойных кавычках (т. е. они не похожи на Python), и некоторые значения могут по-прежнему получать двойные кавычки.
Использование нового API ruamel.yaml
(где по умолчанию используется обратный дамп):
import sys
import ruamel.yaml
data = [
"25",
"with an\n embedded newline",
"entry with single quote: (')",
42
]
yaml = ruamel.yaml.YAML()
yaml.default_style = "'"
yaml.dump(data, sys.stdout)
, что дает:
- '25'
- "with an\n embedded newline"
- 'entry with single quote: ('')'
- !!int '42'
Обратите внимание, что для распознавания 42
как целого числа из-за кавычек скаляр должен быть помечен.То же самое относится и к другим специальным типам, которые может представлять YAML (float, booleans и т. Д.). Если вы не хотите, убедитесь, что все значения, которые вы сбрасываете, являются строками.
Вы также можете увидеть один механизм переходаСкаляры с одинарными кавычками в YAML имеют: так как одинарные кавычки в скаляре удваиваются.(И если бы он был в конце строки Python, у вас было бы три одинарных кавычки подряд в конце скаляра.
Если вы хотите согласованности в своем цитировании, вы должны использовать двойные кавычки,так как это может представлять все допустимые символы. Скаляры в одинарных кавычках в YAML могут занимать несколько строк, поэтому в принципе можно вставить новую строку. Но существуют ограничения на пробел вокруг новой строки.
Если у вас есть миксстроковых и нестроковых значений во ваших входных данных, и вы не хотите получать нестроковые кавычки, тогда вам нужно пройтись по структуре данных и заменить каждую строку x
на ruamel.yaml.scalarstring.SingleQuotedScalarString(x)
, то естьвнутреннее представление, которое ruamel.yaml
использует, если вы укажете yaml.preserve_quotes = True
, чтобы отличать вводимые в одинарные кавычки от простых / двойных / буквальных / сложенных скаляров.