python - 如何让 pyyaml 在输出中正确显示结构?

标签 python pyyaml

而不是像我期望的那样得到正常的换行符,它只是打印'\n'。我怎样才能让换行真正发生?

>>> test2 = [{'A':['a', 'b']}, {'B':'b'}]
>>> yaml.dump(test2)
'- A: [a, b]\n- {B: b}\n'
>>>

最佳答案

PyYAML 中的 dump() 例程有几个可选参数,第一个参数是数据将被序列化到的流 (stream=)。

如果您不指定此流,将创建一个类似对象的文件(StringIO()BytesIO()),数据被序列化到该文件中如果 dump() 例程返回对象 getvalue(),它通常只返回 None

由于您未指定输出流,PyYAML 不知道将输出写入何处并返回 getvalue() 在您的情况下作为字符串的结果。 如果您提供了 encoding= 参数,您将在 Python 3 上获得字节数组而不是字符串。

你当然可以print那个字符串,但这是我看到使用 PyYAML 的人最常犯的错误之一。对于小型数据结构,这是可以原谅的,但对于大型数据结构,在内存中创建字符串表示可能会不必要地消耗大量内存。

你应该习惯提供流参数的习惯:

>>> import yaml
>>> test2 = [{'A':['a', 'b']}, {'B':'b'}]
>>> yaml.dump(test2)
'- A: [a, b]\n- {B: b}\n'
>>> import sys
>>> yaml.dump(test2, stream=sys.stdout)
- A: [a, b]
- {B: b}
>>> 

这也可以防止您在输出末尾出现双换行符(一个来自序列化,一个来自 print)。

关于python - 如何让 pyyaml 在输出中正确显示结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37556363/

相关文章:

python - 试图让 PyC​​harm 工作,不断收到 "No Python interpreter selected"

Python Import No Module Named 错误

python - 在 Python 中读取配置文件(使用 ConfigParser 存储/读取嵌套数据)

yaml - 在YAML中保留新行

python - 在新分支上为 GitHub 上的存储库做出贡献

python - 如何使用 Keras 构建多类卷积神经网络

Python urllib2 请求 https 失败

python - 如何使用 ruamel.yaml 注释掉 YAML 部分?

python - 使用 PyYAML 在 yaml 中将文档作为原始字符串加载

python - 如何强制 PyYAML 将字符串加载为 unicode 对象?