首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么使用python ruamel.yaml.dump写出的yml文件注释会丢失?

为什么使用python ruamel.yaml.dump写出的yml文件注释会丢失?

提问于 2023-01-31 15:38:59
回答 0关注 0查看 102

这是我的docker-compose1.yml文件

代码语言:js
复制
version: "3"
services:
  xxx-service:
    #测试0
    image: 192.168.0.0/xxx-service:v1.1.0
    networks:
      eureka-net:
        ipv4_address: 192.168.0.0
        aliases:
          - xxx-service
    restart: always
    #测试1
    hostname: eem-service
    #测试2
    ports:
    #测试3
    #6379: 6379
    volumes:
      # 日志数据
      - /var/log/CET/docker/eem-service/logs:/logs
      # 拓扑导出导入配置文件
      - /etc/CET/docker/config/eem-service/topology-templates:/etc/CET/eem/config/topology

我的python代码

代码语言:js
复制
# -*- coding: utf-8 -*-
#!/usr/bin/env python3
from ruamel import yaml

def up_yml():
  #读取docker-compose.yml文件
 with open('./docker-compose1.yml', 'r+', encoding="utf-8") as f:
  content = yaml.load(f, Loader=yaml.RoundTripLoader)
  #写入docker-compose.yml文件
 with open('./docker-compose2.yml', 'w+', encoding="utf-8") as nf:
   yaml.dump(content, nf,Dumper=yaml.RoundTripDumper,default_flow_style=False, allow_unicode=True, indent=2, block_seq_indent=2) 
if __name__ == '__main__':
 up_yml()

期待的输出

代码语言:js
复制
version: "3"
services:
  xxx-service:
    #测试0
    image: 192.168.0.0/xxx-service:v1.1.0
    networks:
      eureka-net:
        ipv4_address: 192.168.0.0
        aliases:
          - xxx-service
    restart: always
    #测试1
    hostname: xxx-service
    #测试2
    ports:
    #测试3
    #6379: 6379
    volumes:
      # 日志数据
      - /var/log/ABC/docker/xxx-service/logs:/logs
      # 拓扑导出导入配置文件
      - /etc/ABC/docker/config/xxx-service/topology-templates:/etc/ABC/xxx/config/topology

实际的输出

代码语言:js
复制
version: "3"
services:
  xxx-service:
    #测试0
    image: 192.168.0.0/xxx-service:v1.1.0
    networks:
      eureka-net:
        ipv4_address: 192.168.0.0
        aliases:
          - xxx-service
    restart: always
    hostname: xxx-service
    ports:
    volumes:
      # 日志数据
      - /var/log/ABC/docker/eem-service/logs:/logs
      # 拓扑导出导入配置文件
      - /etc/ABC/docker/config/xxx-service/topology-templates:/etc/ABC/xxx/config/topology

请问这是为什么?除了开头的那个#测试0的注释和vloumes里的注释保留,其他的丢失

我发现image、networks等同一级但是在xxx-service下的注释,仅有xxx-service下紧接着的注释能保留,其他的会丢失

请问有办法解决吗?

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档