我正在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)
此函数更改最终输出的语法。有什么帮助吗?
答案 0 :(得分:1)
此处没有错误,您的代码的行为与您告诉它的方式完全相同。
tests = read_test()
好的,您阅读原始文件并将结果存储在tests
。
for config in tests:
现在,您将遍历原始文件的内容。这是一个YAML序列,因此可以迭代它。
write_test(config)
这里有一些评论:
write_test
始终写入相同的文件,因此会为每个配置项反复覆盖test.yaml
。config
仅包含列表项的值,当然,因此列表本身不是写入的YAML的一部分。要获得所需的输出,只需将这两行替换为:
for config in tests:
write_test(config)
使用:
write_test(tests)
注意:根据您的功能命名,您希望将文件拆分为多个文件。但是,在问题的描述中,您描述了您只想加载它,修改它然后再次转储它。你应该更清楚地描述你想做什么。