【问题标题】:Disable PyYAML value conversion禁用 PyYAML 值转换
【发布时间】: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

标签: python python-2.7 yaml pyyaml


【解决方案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 文档中的标量值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2012-12-16
  • 2014-01-15
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多