gpt4 book ai didi

python - 流的 ruamel.round_trip_dump 向文件添加换行符

转载 作者:行者123 更新时间:2023-11-28 17:13:18 25 4
gpt4 key购买 nike

所以我不确定这是否是流在转储期间的一般行为方式,但我正在使用 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 之后有一个换行符,并且你正在谈论那个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com