所以我不确定这是一个流在转储过程中的行为,但是我使用ruamel.yaml来进行往返更改。
所以采取我非常简单的YAML:
namespace: default
docker_registry_path: dockerhub/hello
version: 1.0
我加载了YAML:
for config in ruamel.yaml.round_trip_load_all(stream=open(config_path)):
....
do some magic
....
ruamel.yaml.round_trip_dump(config, sys.stdout)) #prints out with no extra newlines
ruamel.yaml.round_trip_dump(config, stream=open(config_path, 'w'))
控制台看起来很棒,没有额外的换行符。返回YAML的流包含一个额外的换行符。虽然我可以编写一个后来截断最后一行的处理程序,但我觉得这很笨重,要么我倾向于错误,要么用这种方式写入流不是我想要的方式。
答案 0 :(得分:2)
您没有提供完整的工作计划,因此无法看到您做错了什么。从您提供的代码中,我不确定您为什么尝试从单个文档流中读取多个文档。
我假设你文件中的0
之后有一个换行符,你在version: 1.0
之后谈论一个额外的换行符(即空行),但是我无法重现它。 / p>
如果您的三行YAML输入文档符合指示并保存在config.yaml
中,并且您在Python2或Python3上运行以下命令:
import sys
import ruamel.yaml
config_path = "config.yaml"
for config in ruamel.yaml.round_trip_load_all(stream=open(config_path)):
pass
ruamel.yaml.round_trip_dump(config, sys.stdout)
ruamel.yaml.round_trip_dump(config, stream=open('abc.yaml', 'w'))
print(repr(open('abc.yaml').read()))
你得到相同的输出:
namespace: default
docker_registry_path: dockerhub/hello
version: 1.0
'namespace: default\ndocker_registry_path: dockerhub/hello\nversion: 1.0\n'
正如您所看到的,文件末尾没有空行。
我唯一一次在控制台上看到一个额外的换行符是人们做类似的事情:
print(ruamel.yaml.round_trip_dump(config))
或
print(ruamel.yaml.round_trip_dump(config), stream=open('klm.yaml', 'w'))
当然会有额外的换行符。如果不需要,则应将end=''
添加到print
功能。