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 基础之字符串string详解及实例
Apr 01 Python
速记Python布尔值
Nov 09 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
在pandas中一次性删除dataframe的多个列方法
Apr 10 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
解析Tensorflow之MNIST的使用
Jun 30 Python
如何教少儿学习Python编程
Jul 10 Python
python区块链实现简版工作量证明
May 25 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实现指定字段的多维数组排序函数分享
2015/03/09 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
Python实现抢购IPhone手机
2018/02/07 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
文史专业毕业生自荐信
2013/11/17 职场文书
详解Nginx 工作原理
2021/03/31 Servers