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 相关文章推荐
如何搜索查找并解决Django相关的问题
Jun 30 Python
进一步理解Python中的函数编程
Apr 13 Python
Python base64编码解码实例
Jun 21 Python
使用python调用zxing库生成二维码图片详解
Jan 10 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
机器学习10大经典算法详解
Dec 07 Python
Python中的pack和unpack的使用
Mar 12 Python
pandas.DataFrame选取/排除特定行的方法
Jul 03 Python
Python Unittest根据不同测试环境跳过用例的方法
Dec 16 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
Django 权限管理(permissions)与用户组(group)详解
Nov 30 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之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
PHP读取大文件的类SplFileObject使用介绍
2014/04/09 PHP
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
laravel 数据验证规则详解
2019/10/23 PHP
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
jquery时间下拉框小例子
2013/04/15 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
英国最大的百货公司:Harrods
2016/08/18 全球购物
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
应届毕业生个人自我评价
2013/09/20 职场文书
酒店值班经理的工作职责范本
2014/02/18 职场文书
最经典的商业地产项目广告词
2014/03/13 职场文书
维稳工作情况汇报
2014/10/27 职场文书
房产公证书格式
2015/01/26 职场文书
春风化雨观后感
2015/06/11 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
2016年记者节感言
2015/12/08 职场文书
《打电话》教学反思
2016/02/22 职场文书