禁用 PyYAML 值转换
Posted
技术标签:
【中文标题】禁用 PyYAML 值转换【英文标题】:Disable PyYAML value conversion 【发布时间】:2013-01-29 05:35:19 【问题描述】:我刚刚开始使用PyYAML来转换一些数据。
我只是使用yaml.load
函数,它对我来说已经足够好了,直到我注意到它尝试将所有值转换为统一编码的字符串、int、日期等。
这在我的应用程序中可能是致命的,有没有办法避免这种转换? 我想以字符串的形式接收所有内容。 我查看了构造函数,找不到禁用此转换的方法。
更新:
我从yaml.load
得到的是OrderedDict
,一切看起来都很好。唯一的问题是有些值是字符串,有些是整数。我想将所有值都作为字符串。我不希望 pyyaml 为我转换值。
【问题讨论】:
那你不是在解码 YAML。此外,究竟是什么你想留下字符串,什么不?如果你留下 everything 一个字符串,你想要the_file.read()
;-)
我使用pyyaml解析的文件实际上不是yaml,但它足够接近。因此我想避免类型转换。
但是什么类型的转换呢?您想接收列表吗?字典?你想转换布尔值吗?浮动?到任意深度还是固定格式?就目前而言,这太不明确了。
@delnan,请查看更新信息
举个例子,假设你有一个数据结构,其中两个字母的位置代码在历史上被不带引号地放入 YAML,并且你希望位置代码 on
到 不会转换为True
。
【参考方案1】:
好吧,您可以使用Loader=yaml.BaseLoader
将所有内容都保留为字符串:
>>> x = [[1,2,3], 1:2]
>>> s = yaml.dump(x)
>>> s
'- [1, 2, 3]\n- 1: 2\n'
>>> yaml.load(s)
[[1, 2, 3], 1: 2]
>>> yaml.load(s, Loader=yaml.BaseLoader)
[[u'1', u'2', u'3'], u'1': u'2']
【讨论】:
当心:虽然这确实禁用了自动值转换,但它似乎也导致“ 上测试 这也会导致键和(序列)元素被构造为字符串,而不仅仅是 YAML 文档中的标量值。以上是关于禁用 PyYAML 值转换的主要内容,如果未能解决你的问题,请参考以下文章