python读取yaml文件后修改写入本地实例


Posted in Python onApril 27, 2020

首先安装pip install ruamel.yaml

用于修改yaml文件

#coding:utf-8
from ruamel import yaml

def up_yml(ip_server):
 with open('./../docker-compose-demo.yml', encoding="utf-8") as f:
  content = yaml.load(f, Loader=yaml.RoundTripLoader)
  # 修改yml文件中的参数
  content['service']['memo_query']['server_ip'][0] = 'mysql_host={}'.format(ip_server)
 with open('./../docker-compose.yml', 'w', encoding="utf-8") as nf:
  yaml.dump(content, nf, Dumper=yaml.RoundTripDumper)

if __name__ == '__main__':
 up_yml(ip_server='0.0.0.0')

修改前:

version: '1'
service:
 memo_query:
 image: python:2.0
 restart: always
 server_ip:
 - mysql_host=192.168.1.1

修改后:

version: '1'
service:
 memo_query:
 image: python:2.0
 restart: always
 server_ip:
 - mysql_host=0.0.0.0

补充知识:解决 Python ruamel.yaml 读写 yaml 文档 format 格式不一致问题

使用 ruamel.yaml 过程中发现输入输出格式不一致,网上找到一个解决方案:

input:

ChuaTony: 
 公司: 文传
 联络: 
 - 公司: '1422031030'
 - 手机: '18650144578'
 - 住家: '2233068479'
 住址: 
 - 公司: ?建。
 - 住家: 台中。
 交通: 无
 附件: 
Tom: 
 公司: 天?
 联络: 
 - 公司: '1422031030'
 - 手机: '18650123456'
 - 住家: '2233061234'
 住址: 
 - 公司: ?建。
 - 住家: 台北。
 交通: 自行车
 附件:
output:
ChuaTony:
 交通: 无
 住址:
 - 公司: ?建。
 - 住家: 台中。
 公司: 文传
 联络:
 - 公司: '1422031030'
 - 手机: '18650144578'
 - 住家: '2233068479'
 附件: null
Tom:
 交通: 自行车
 住址:
 - 公司: ?建。
 - 住家: 台北。
 公司: 天?
 联络:
 - 公司: '963852741'
 - 手机: '18650123456'
 - 住家: '2233061234'
 附件: null

格式不一致

使用:

ruamel.yaml.load(Loader=ruamel.yaml.RoundTripLoader) ruamel.yaml.dump(Dumper=ruamel.yaml.RoundTripDumper)

ruamel.yaml.round_trip_load() ruamel.yaml.round_trip_dump()

来解决

修改程式码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
' a YAML module '
 
__author__ = 'Chua Tony'
 
import ruamel.yaml
 
#开档
with open("人资.yaml", "r",encoding="utf-8") as docs:
	try:
		#alldata = ruamel.yaml.load(docs, Loader=ruamel.yaml.RoundTripLoader) #使用 Loader=ruamel.yaml.RoundTripLoader
		alldata = ruamel.yaml.round_trip_load(docs)
	except ruamel.yaml.YAMLError as exc:
		print(exc)
 
#印出
for data in alldata:
	print(alldata[data]['联络'])
 
#修改
alldata['Tom']['联络'][0]['公司']='963852741'
 
#写档
with open('人资1.yaml', 'w+', encoding='utf8') as outfile:
	#ruamel.yaml.dump(alldata, outfile, default_flow_style=False, allow_unicode=True, Dumper=ruamel.yaml.RoundTripDumper, indent=2, block_seq_indent=2) #使用 Dumper=ruamel.yaml.RoundTripDumper
	ruamel.yaml.round_trip_dump(alldata, outfile, default_flow_style=False, allow_unicode=True, indent=2, block_seq_indent=2) #indent:缩进 block_seq_indent:区块缩进

output:

ChuaTony:
 公司: 文传
 联络:
 - 公司: '1422031030'
 - 手机: '18650144578'
 - 住家: '2233068479'
 住址:
 - 公司: ?建。
 - 住家: 台中。
 交通: 无
 附件:
Tom:
 公司: 天?
 联络:
 - 公司: '963852741'
 - 手机: '18650123456'
 - 住家: '2233061234'
 住址:
 - 公司: ?建。
 - 住家: 台北。
 交通: 自行车
 附件:

搞定!!!

以上这篇python读取yaml文件后修改写入本地实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python操作MySQL数据库具体方法
Oct 28 Python
深入理解python try异常处理机制
Jun 01 Python
Python 模拟购物车的实例讲解
Sep 11 Python
解决python3捕获cx_oracle抛出的异常错误问题
Oct 18 Python
对python3 中方法各种参数和返回值详解
Dec 15 Python
Python实现图像去噪方式(中值去噪和均值去噪)
Dec 18 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 Python
彻底解决Python包下载慢问题
Nov 15 Python
python中slice参数过长的处理方法及实例
Dec 15 Python
基于SpringBoot构造器注入循环依赖及解决方式
Apr 26 #Python
Python判断字符串是否为空和null方法实例
Apr 26 #Python
如何将PySpark导入Python的放实现(2种)
Apr 26 #Python
基于python实现对文件进行切分行
Apr 26 #Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 #Python
简单了解Java Netty Reactor三种线程模型
Apr 26 #Python
Python Selenium截图功能实现代码
Apr 26 #Python
You might like
PHP个人网站架设连环讲(二)
2006/10/09 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
js如何验证密码强度
2020/03/18 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python操作串口的方法
2015/06/17 Python
Python解析最简单的验证码
2016/01/07 Python
Python与R语言的简要对比
2017/11/14 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
PyQt5响应回车事件的方法
2019/06/25 Python
Python如何解除一个装饰器
2020/08/07 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
创建学习型党组织实施方案
2014/03/29 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
大学生社会实践感想
2015/08/11 职场文书
旷工检讨书大全
2015/08/15 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL