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抽象类的新写法
Jun 18 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
对Python3之进程池与回调函数的实例详解
Jan 22 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
python实现复制大量文件功能
Aug 31 Python
基于python-pptx库中文文档及使用详解
Feb 14 Python
python pandas利用fillna方法实现部分自动填充功能
Mar 16 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
Python-split()函数实例用法讲解
Dec 18 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微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
我的Node.js学习之路(四)--单元测试
2014/07/06 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
简单实现Python爬取网络图片
2018/04/01 Python
python基于Selenium的web自动化框架
2019/07/14 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
新英格兰最大的特色礼品连锁店:The Paper Store
2018/07/23 全球购物
医院护士专业个人的求职信
2013/12/09 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
珍惜水资源建议书
2014/03/12 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
个人工作表现评语
2014/04/30 职场文书
公司委托书范本5篇
2014/09/20 职场文书
学校世界艾滋病日宣传活动总结
2015/05/05 职场文书
2015年纪委工作总结
2015/05/13 职场文书
毕业论文致谢信
2015/05/14 职场文书
PyQt5实现多张图片显示并滚动
2021/06/11 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python
解决WINDOWS电脑开机后桌面没有任何图标
2022/04/09 数码科技