Python 禁用PyYAML值转换
我刚刚开始使用PyYAML转换一些数据 我只使用了Python 禁用PyYAML值转换,python,python-2.7,yaml,pyyaml,Python,Python 2.7,Yaml,Pyyaml,我刚刚开始使用PyYAML转换一些数据 我只使用了yaml.load函数,这对我来说已经足够好了,直到我注意到它试图将所有值转换为单编码字符串、int、日期等等 这在我的应用程序中可能是致命的,有没有办法避免这种转换? 我想把一切都当作字符串来接收。 我查看了构造函数,但找不到禁用此转换的方法 更新: 我从yaml.load得到的是一个订购的ICT,一切看起来都很好。唯一的问题是有些值是字符串,有些是int。我希望所有值都是字符串。我不想让pyyaml为我转换值。那么,您可以使用Loader=y
yaml.load
函数,这对我来说已经足够好了,直到我注意到它试图将所有值转换为单编码字符串、int、日期等等
这在我的应用程序中可能是致命的,有没有办法避免这种转换?
我想把一切都当作字符串来接收。
我查看了构造函数,但找不到禁用此转换的方法
更新:
我从yaml.load得到的是一个订购的ICT,一切看起来都很好。唯一的问题是有些值是字符串,有些是int。我希望所有值都是字符串。我不想让pyyaml为我转换值。那么,您可以使用
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。此外,你到底想留下什么作为字符串,什么不是?如果将所有内容都保留为字符串,则需要
文件.read()
;-)我使用pyyaml解析的文件实际上不是yaml,但它已经足够接近了。因此我想避免类型转换。但是什么类型的类型转换呢?您想接收列表吗?字典?你想让布尔人转换吗?花车?任意深度还是固定格式?就目前情况而言,这是一个太少的指定。@delnan,请查看更新的信息作为一个示例,如果您有一个数据结构,其中两个字母的位置代码历史上被放入YAML unquoted,您希望上的位置代码不会转换为True
。注意:虽然这会禁用自动值转换,但它似乎也会导致“这也会导致键和(序列)元素被构造为字符串,而不仅仅是YAML文档中的标量值。