我想完成:
将词典附加到现有词典列表并更新该词典中的值。
我的问题是: 当我从.yaml RobotFramework中读取我的词典时,会在关键字和值周围添加双重qoutes,如下所示。
在.yaml我有
Vlan2: { u'IP': u'1.1.1.1',
u'DNS': {u'SN': u's2', u'PN': u's1'},
u'SRoute': [{u'IF': u'eth0', u'Mask': u'0.0.0.0'}]
}
但是当我做的时候
Collections.Set To Dictionary ${Vlan2} IP=2.2.2.2
我登录到控制台
Log To Console ${Vlan2}
我得到了
[{ "u'IP'": "u'1.1.1.1'",
u'IP': '2.2.2.2',
"u'DNS'": {"u'SN'": "u's2'", "u'PN'": "u's1'"},
"u'SRoute'": [{"u'IF'": "u'eth0'", "u'Mask'": "u'0.0.0.0'"}]
}]
我认为这种情况正在发生,因为Robot Framework在从.yaml中读取值时会添加双qoutes,因为它会显示为不同的关键字,但我无法找到解决方法。
理想的是避免双重qoutes,因为JSON信息将基于单个qoute,如.yaml。
感谢任何帮助!
答案 0 :(得分:3)
这里有很多混乱。这部分你的YAML:
{ u'IP': u'1.1.1.1',
启动映射({
)并提供键值对。关键和价值都是标量。第一个标量以u
开头,在关键指标(:
)之前结束,因此标量的内容为u'IP'
。请注意,这可能不是您想要的,因为您说:
因为JSON信息将基于单个qoute,如.yaml。
您似乎认为您在YAML中使用单引号标量,而事实上,您正在使用未加引号的标量。在YAML中,如果标量不以引号('
或"
)开头,则它是一个普通标量,其中的其他引号将被解析为内容。你的标量以u
开头,使它们成为不带引号的标量。你的YAML应该是这样的:
Vlan2: { IP: 1.1.1.1,
DNS: {SN: s2, PN: s1},
SRoute: [{IF: eth0, Mask: 0.0.0.0}]
}
另一个要记住的重要事项是,当加载到Python中时,标量的表示形式会丢失 - 如果它在YAML文件中是单引号,双引号或不引用,则没有区别。
现在让我们看看输出:这里再次,字符串以文本形式表示。这意味着它们通过某种方式引用。表示"u'IP'"
完全匹配您的输入,双引号不添加到字符串中;它们只是用来告诉你所包含的字符形成一个字符串。
然后在输出中有这种表示:u'IP'
。这仍然是一个带引号的字符串,只是在前面有一个u
的Python特定表示,表明这是一个unicode字符串 - 它的内容是IP
。 YAML中不存在u
- 前缀表示,这就是您的输入无法正常工作的原因。在YAML中,所有输入都是unicode,通常编码为UTF-8。输出中的u'IP'
是您使用代码设置的IP
值。并且因为它与任何现有的dict键都不匹配(正如您所解释的那样,原始键具有内容u'IP'
,在输出中表示为"u'IP'"
),它已被添加为dict的附加键