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)