禁用 PyYAML 值转换

16 投票
1 回答
6141 浏览
提问于 2025-04-17 15:46

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

我用的是yaml.load这个函数,最开始觉得挺好用的,直到我发现它会把所有的值都转换成Unicode字符串、整数、日期等等。

这在我的应用中可能会造成严重问题,有没有办法避免这种转换?我希望所有的值都能以字符串的形式返回。我查看了构造函数,但没找到关闭这种转换的方法。

更新:
我从yaml.load得到的是一个OrderedDict,看起来一切正常。唯一的问题是,有些值是字符串,有些是整数。我希望所有的值都能以字符串的形式出现。我不想让pyyaml帮我转换这些值。

1 个回答

32

好吧,你可以使用 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'}]

撰写回答