ruamel.yaml在Python中添加列表项时多余空行问题求助
解决ruamel.yaml添加列表项后出现多余空行并保留注释的问题
问题原因
原YAML文件中block1的最后一项- bbb后存在空行,ruamel.yaml会将这个空行解析为CommentToken('\n\n')并存储在对应CommentedSeq对象的ca.end属性中。当向列表追加新项时,这个空行注释会被保留,导致原有项与新项之间出现多余空行。
解决方案
在追加新项前,清理目标列表末尾的空行注释Token,同时保留其他注释内容。修改后的代码如下:
from ruamel.yaml import Yaml def loader(my_yaml_file): yaml = Yaml() with open(my_yaml_file, "r", encoding="UTF-8") as file: return yaml.load(file) def writer(data, my_yaml_file): yaml = Yaml() yaml.indent(mapping=2, sequence=4, offset=2) with open(my_yaml_file, "w", encoding="UTF-8") as file: yaml.dump(data, file) def do_stuff(): my_yaml_file = "file.yml" loaded_yaml = loader(my_yaml_file) block1_seq = loaded_yaml["block1"] # 清理列表末尾的空行注释 if block1_seq.ca.end is not None and block1_seq.ca.end.value == '\n\n': block1_seq.ca.end = None block1_seq.append("ccc") writer(loaded_yaml, my_yaml_file)
验证结果
运行修改后的代码后,输出的YAML文件将符合期望格式:
name: someone age: 100 # this is a comment # and another block1: - aaa - bbb - ccc block2: sub: - 111 - 222 # a comment - 333
所有原有注释均被保留,block1中新增项与原有项之间无多余空行。
内容的提问来源于stack exchange,提问作者iSaWcH
相关产品推荐
相关产品推荐

