Python YAML转储程序单引号和双引号问题

时间:2018-12-04 05:31:25

标签: python yaml pyyaml ruamel.yaml

我正在从excel文件中读取行并转储到YAML文件,转储后我发现单引号,双引号和纯文本中提到了某些行。

没有任何特殊字符的数据将被创建为纯文本。
具有\ n字符和括号的数据被创建为“此处的数据”
具有特殊字符的数据将创建为“此处的数据”

我正在使用Yaml Dumper创建YAML文件

 ggplot(aes(x=Cohort, y=as.numeric(LEN_Dose)), data = dat) +
   ylab("Dose Level\n") +
   xlab("\nCohort") +
   ggtitle("\n") +
   scale_y_continuous(breaks = c(5, 10, 15, 25),
                      label = c("1.2mg/kg\n5mg", "1.2mg/kg\n10mg", "1.8mg/kg\n15mg", "1.8mg/kg\n25mg")) +
   scale_fill_manual(values = c("white", "darkred"), 
                     name="Had DLT") +
   geom_line(colour="grey20", size=1) +
   geom_point(shape=23, size=6, aes(fill=DLT), stroke=1.1, colour="grey20") + # 21 for circles
   theme_classic() +
   theme(legend.box.margin=margin(c(0,0,0,-10))) +
   expand_limits(y=c(5,25))

如何将所有数据表示为单引号position = position_jitter

1 个答案:

答案 0 :(得分:0)

当可以表示标量时,可以强制转储程序使用单引号 通过提供public static MyApplication get() { if(sInstance == null){ sInstance = this; } return sInstance; } 参数使用单引号引起来的字符串。

尽管不能保证您获得单引号,但不能使用单引号 双引号具有的转义序列(即,它不像Python)并且 有些值可能仍会使用双引号。

使用default_style="'"的新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' 识别为整数,因为 引号,该标量需要标记。同样适用于 YAML可以代表其他特殊类型(浮点型,布尔型等)。 不想确保您转储的所有值都是字符串。

您还可以看到YAML中单引号标量的一种转义机制具有: 因为标量中的单引号加倍。 (如果它已经在 Python字符串,标量末尾将连续有三个单引号。

如果要保持报价一致,则应使用双引号,因为它可以代表所有有效字符。 YAML中的单引号标量可以跨越多行,因此原则上可以嵌入换行符。但是换行符之间对空格有限制。

如果输入数据中包含字符串值和非字符串值的混合,并且不想获取非字符串引用,则必须递归遍历数据结构并替换每个字符串{{1 }}与42,即 如果您指定x来区分单引号输入和普通/双/文字/折叠标量,则ruamel.yaml.scalarstring.SingleQuotedScalarString(x)使用的内部表示形式。