而不是像我期望的那样得到正常的换行符,它只是打印'\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/