如何让 pyyaml 在输出中正确显示结构?
How can I get pyyaml to correctly display structure in output?
而不是像我期望的那样得到正常的换行符,它只是打印'\n'。我怎样才能让换行真正发生?
>>> test2 = [{'A':['a', 'b']}, {'B':'b'}]
>>> yaml.dump(test2)
'- A: [a, b]\n- {B: b}\n'
>>>
您可以使用 print
获取要渲染的换行符。以这种方式在交互式提示中显示的字符串永远不会呈现换行符。您可以通过字符串周围显示的引号 ('
) 来判断字符串的显示方式,这些不会与 print
.
一起出现
>>> test2 = [{'A':['a', 'b']}, {'B':'b'}]
>>> yaml.dump(test2)
'- A: [a, b]\n- {B: b}\n'
>>> print(yaml.dump(test2))
- A: [a, b]
- {B: b}
>>>
PyYAML 中的 dump()
例程有几个可选参数,第一个参数是数据将序列化到的流 (stream=
)。
如果您不指定此流,将创建一个类似对象的文件(StringIO()
或 BytesIO()
),数据将序列化到该文件中,在这种情况下 dump()
反对 getvalue()
的例程 returns,它通常只是 returns None
.
由于您没有指定输出流,PyYAML 不知道在哪里写入输出和 returns 在您的情况下 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
)。
而不是像我期望的那样得到正常的换行符,它只是打印'\n'。我怎样才能让换行真正发生?
>>> test2 = [{'A':['a', 'b']}, {'B':'b'}]
>>> yaml.dump(test2)
'- A: [a, b]\n- {B: b}\n'
>>>
您可以使用 print
获取要渲染的换行符。以这种方式在交互式提示中显示的字符串永远不会呈现换行符。您可以通过字符串周围显示的引号 ('
) 来判断字符串的显示方式,这些不会与 print
.
>>> test2 = [{'A':['a', 'b']}, {'B':'b'}]
>>> yaml.dump(test2)
'- A: [a, b]\n- {B: b}\n'
>>> print(yaml.dump(test2))
- A: [a, b]
- {B: b}
>>>
PyYAML 中的 dump()
例程有几个可选参数,第一个参数是数据将序列化到的流 (stream=
)。
如果您不指定此流,将创建一个类似对象的文件(StringIO()
或 BytesIO()
),数据将序列化到该文件中,在这种情况下 dump()
反对 getvalue()
的例程 returns,它通常只是 returns None
.
由于您没有指定输出流,PyYAML 不知道在哪里写入输出和 returns 在您的情况下 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
)。