Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何让pyyaml在输出中正确显示结构?_Python_Pyyaml - Fatal编程技术网

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

Python 如何让pyyaml在输出中正确显示结构?,python,pyyaml,Python,Pyyaml,而不是像我期望的那样得到正常的换行符,它只是打印“\n”。我怎样才能使断线真正发生 >>> test2 = [{'A':['a', 'b']}, {'B':'b'}] >>> yaml.dump(test2) '- A: [a, b]\n- {B: b}\n' >>> 可以使用print获得要渲染的换行符。以这种方式显示在交互提示中的字符串永远不会呈现换行符。您可以通过显示在字符串周围的引号(”)来判断字符串的显示方式,这些引号不会在打印时

而不是像我期望的那样得到正常的换行符,它只是打印“\n”。我怎样才能使断线真正发生

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

可以使用
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()
,通常只返回
None

由于没有指定输出流,PyYAML不知道将输出写入何处,并以字符串形式返回案例中的
getvalue()
结果。 如果您提供了
encoding=
参数,那么在Python3上会得到一个字节数组,而不是一个字符串

当然,您可以打印该字符串,但这是我看到的使用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
)。

您是否尝试过使用
print
?像这样的交互式提示中的字符串从不显示换行符,您需要打印它。不,我是个白痴。谢谢,没问题。我发布了一个答案,介意接受吗?请阅读交互式提示,它会自动显示最后一个结果的表示-就好像你做了一个
打印(repr(result))
,而不是许多人认为的
打印(result)
。这些将被生成相当重要的结构(1000多行)所以这是一个更好的答案,谢谢你的回答explanation@Fallacy11我不完全理解(我不是母语人士),你的意思是你将拥有巨大的数据结构,因此内存使用将非常重要吗?是的,我正在使用不同供应商的设备生成ansible Playbook,这些设备有不同的要求。所有这些都需要在YAML文件中定义,由于我使用不同的环境和需要定义的逻辑(如果x环境类型使用y结构),这些1000+行将随着时间的推移显著增长,同时执行后台监控任务,资源效率越高,对我越有利。如果我可以直接输入,而不是使用打印来创建文件(我相信我可以),将使这更高效。@Fallacy11在这种情况下,还有两件事需要研究:使用CDumper(如第一个示例中所示),因为这会更快。如果你想更新剧本(读YAML,转储YAML),你可能想看看我的软件包,它保留了评论、键顺序等。