欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python更新yaml文件保留注释内容和换行缩进办法

程序员文章站 2022-03-03 20:33:49
...

python常用编辑读取yaml文件的库有yaml、pyyaml等,直接使用会因为注释内容大多为中文,编码存储实现方式原因,导致注释丢失,或中文部分变成乱码。

 

下面是使用ruamel.yaml实现保留手动编辑的注释和中文部分内容方法源码,很简单。

 

# -*- coding: utf-8 -*-
# @Time : 2021/9/5 23:10
# @Author : Administrator
# @File : yamltoolsplus.py
# @Software : PyCharm

import os
from ruamel.yaml import YAML

'''yaml文件的相对路径'''
filename =os.path.join(os.path.dirname(__file__),'PublicConfig.yaml').replace("\\","/")

co=open(filename,'r+',encoding='utf-8')

yaml = YAML()
yamldata = yaml.load(co)

def update_yamldata(data):
    co = open(filename, 'r+', encoding='utf-8')
    yaml = YAML()
    yaml.dump(data, open(filename, 'w+', encoding='utf-8'))
    co.close()

"""
使用示例
"""
#引用import
# from common_interface.funder.yamltools import *

from faker import Faker

fa_cn=Faker(locale='zh_CN')
fa_en=Faker(locale='en_US')
#更新前查询
print("更新前用户姓名:",yamldata['Eboss_User']['cnName'])

#更新
yamldata['Eboss_User']['cnName']=fa_cn.name()
update_yamldata(data=yamldata)
print("更新后用户姓名:",yamldata['Eboss_User']['cnName'])

#追加json内容到yaml文件中,其中['test']节点为新增节点
jsondata={'pageIndex': 1, 'pageSize': 10, 'model': {'source': '', 'sourceCode': '', 'target': '', 'receiptStockStatus': '', 'targetCode': '', 'orderNo': '', 'stockOutNo': '', 'shipmentVendor': '', 'shipmentCode': 'JDLuBan20210906144703991391', 'estimateTimeStart': '', 'estimateTimeEnd': '', 'checkoutTimeStart': '', 'checkoutTimeEnd': '', 'transportStatus': 1, 'transportFormNo': '', 'gmtCreateStart': '2021-08-07 00:00:00', 'gmtCreateEnd': '2021-09-06 23:59:59'}}
yamldata['test']=jsondata
update_yamldata(data=yamldata)