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代码来解图片迷宫的方法整理
Apr 02 Python
Python and、or以及and-or语法总结
Apr 14 Python
Python处理PDF及生成多层PDF实例代码
Apr 24 Python
Python3中编码与解码之Unicode与bytes的讲解
Feb 28 Python
python中bs4.BeautifulSoup的基本用法
Jul 27 Python
opencv导入头文件时报错#include的解决方法
Jul 31 Python
python线程中的同步问题及解决方法
Aug 29 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
Python实例教程之检索输出月份日历表
Dec 16 Python
python热力图实现的完整实例
Jun 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 生成饼图 三维饼图
2009/09/28 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
PHP Session机制简介及用法
2014/08/19 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
制作特殊字的脚本
2006/06/26 Javascript
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
python爬取哈尔滨天气信息
2018/07/14 Python
python实现可逆简单的加密算法
2019/03/22 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
JAVA中的关键字有什么特点
2014/03/07 面试题
如何利用find命令查找文件
2016/11/18 面试题
电子商务专业求职信
2014/07/10 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
农业项目投资意向书
2015/05/09 职场文书
2015年教务工作总结
2015/05/23 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js