因此,我不确定这是否是一条流在转储期间的一般行为,但我正在使用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/

10-10 03:45