禁用PyYAML值转换

the*_*lse 12 python yaml pyyaml python-2.7

我刚开始使用PyYAML转换一些数据.

我只是使用该yaml.load函数,它对我来说已经足够了,直到我注意到它试图将所有值转换为单编码字符串,int,日期等.

这在我的应用程序中可能是致命的,有没有办法避免这种转换?我想收到一切作为字符串.我查看了构造函数,但无法找到禁用此转换的方法.

更新:我得到的yaml.loadOrderedDict一切,一切看起来都很好.唯一的问题是有些值是字符串,有些是int.我想将所有值都作为字符串.我不希望pyyaml为我转换值.

DSM*_*DSM 27

好吧,您可以使用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'}]
Run Code Online (Sandbox Code Playgroud)

  • 注意:虽然这会禁用自动值转换,但它似乎也会导致"<<"合并键不再在多个级别上工作(即"<<" - 合并一个本身也是"<<"的锚节点-merges其他锚节点将不再工作) - 在PyYAML 3.10和3.11上测试 (2认同)