gpt4 book ai didi

python - 使用 python 转储缺少 YAML 语法

转载 作者:太空宇宙 更新时间:2023-11-03 15:46:27 26 4
gpt4 key购买 nike

我正在用 python 读取这样的 yaml 文件:

- test:
name: test1
param:
p1: v1
p2: v2

首先我解析文件,然后对其应用一些更改,最后将其转储到多个文件中。

def read_test():
with open('file.yaml', "r") as stream:
test = yaml.load(stream)



def write_test(config):
with open('test.yaml', 'w') as outfile:
yaml.dump(config, outfile, default_flow_style=False)

这是我得到的输出:

test:
name: test1
param:
p1: localhost:3000
p2: ../test/run.sh

但我希望这样:

- test:
name: test1
param:
p1: localhost:3000
p2: ../test/run.sh

更新

这就是我应用更改的方式:

def split_test():
try:
tests = read_test()
for config in tests:
write_test(config)
except yaml.YAMLError as out:
print(out)

此函数更改最终输出的语法。有什么帮助吗?

最佳答案

这里没有错误,您的代码的行为完全按照您的指示进行。

tests = read_test()

好的,您读取原始文件并将结果存储在 tests 中。

for config in tests:

现在您将迭代原始文件的内容。这是一个 YAML 序列,因此可以对其进行迭代。

  write_test(config)

这里有一些评论:

  • 这将为输入 YAML 的每个配置项执行。
  • 由于 write_test 始终写入相同的文件,这将为每个配置项一次又一次地覆盖 test.yaml
  • 由于 config 仅包含列表项的值,当然列表本身不是所编写的 YAML 的一部分。

要获得所需的输出,只需替换这两行:

for config in tests:          
write_test(config)

与:

write_test(tests)

注意:根据函数的命名,您想要将文件拆分为多个文件。然而,在问题的描述中,您描述您只想加载它,修改它,然后再次转储它。您可能应该更清楚地描述您想要做什么。

关于python - 使用 python 转储缺少 YAML 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696431/

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