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 中的匿名函数
May 21 Python
Python File(文件) 方法整理
Feb 18 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
Sep 11 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
解决Tensorflow sess.run导致的内存溢出问题
Feb 05 Python
Python拼接字符串的7种方式详解
Mar 19 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
使用Python实现批量ping操作方法
May 06 Python
Python matplotlib可视化实例解析
Jun 01 Python
详解Python IO口多路复用
Jun 17 Python
python使用隐式循环快速求和的实现示例
Sep 11 Python
python实现网页录音效果
Oct 26 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
一个捕获函数输出的函数
2007/02/14 PHP
PHP 采集程序 常用函数
2008/12/18 PHP
php图片加水印原理(超简单的实例代码)
2013/01/18 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
js正确获取元素样式详解
2009/08/07 Javascript
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
Python2随机数列生成器简单实例
2017/09/04 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
python对象与json相互转换的方法
2019/05/07 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
python如何调用java类
2020/07/05 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
《识字五》教学反思
2014/03/01 职场文书
争做文明公民倡议书
2014/08/29 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
优秀党员推荐材料
2014/12/18 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书