因此,我不确定这是否是一条流在转储期间的一般行为,但我正在使用ruamel.yaml进行往返更改。
所以拿我的简单山药:
namespace: default
docker_registry_path: dockerhub/hello
version: 1.0
我装药:
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
之后有一个换行符,并且您正在谈论version: 1.0
之后的一个额外换行符(即一个空行符),但是我不能复制它。
如果您的三行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
函数中。关于python - 流的ruamel.round_trip_dump将换行符添加到文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45945662/