我正在从excel文件中读取行,并将其转储到YAML文件中,转储后,我发现一些行以单引号、双引号和纯文本形式提及。
没有任何特殊字符的数据将创建为纯文本
带字符和括号的数据被创建为"此处数据">
我正在使用yaml dumper创建yaml文件
with open(myprops['output'], "w") as f:
ruamel.yaml.dump(doc,f, Dumper=ruamel.yaml.RoundTripDumper,default_flow_style=False)
如何表示单引号- 'Data here'
中的所有数据?
当标量可以表示时,可以强制dumper使用单引号通过提供CCD_ 2参数来使用单引号字符串。
但这并不能保证给你带来单引号,单引号是做不到的双引号的转义序列(即它不像Python(和有些值可能仍然会有双引号。
使用ruamel.yaml
的新API(其中round-trip-dumping是默认设置(:
import sys
import ruamel.yaml
data = [
"25",
"with ann embedded newline",
"entry with single quote: (')",
42
]
yaml = ruamel.yaml.YAML()
yaml.default_style = "'"
yaml.dump(data, sys.stdout)
它给出:
- '25'
- "with ann embedded newline"
- 'entry with single quote: ('')'
- !!int '42'
请注意,为了将42
识别为整数,因为引号,该标量需要标记。同样适用于YAML可以表示的其他特殊类型(浮点、布尔值等(如果不要确保所有转储的值都是字符串。
您还可以看到YAML中的一个转义机制单引号标量:因为标量中的单引号被加倍。(如果是在Python字符串,在标量末尾的一行中有三个单引号。
如果你想在引用中保持一致,你应该使用双引号,因为它可以代表所有有效字符。YAML中的单引号标量可以跨越多行,因此原则上可以嵌入换行符。但是换行符周围的空格是有限制的。
如果您的输入数据中混合了字符串和非字符串值,并且不想让非字符串被引用,那么您必须在数据结构上递归,并将每个字符串x
替换为ruamel.yaml.scalarstring.SingleQuotedScalarString(x)
,即如果指定yaml.preserve_quotes = True
来区分单引号输入和纯/双引号/文本/折叠标量,则ruamel.yaml
使用的内部表示。