python读取yaml文件后修改写入本地实例
首先安装pipinstallruamel.yaml
用于修改yaml文件
#coding:utf-8 fromruamelimportyaml defup_yml(ip_server): withopen('./../docker-compose-demo.yml',encoding="utf-8")asf: content=yaml.load(f,Loader=yaml.RoundTripLoader) #修改yml文件中的参数 content['service']['memo_query']['server_ip'][0]='mysql_host={}'.format(ip_server) withopen('./../docker-compose.yml','w',encoding="utf-8")asnf: 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
补充知识:解决Pythonruamel.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/envpython3 #-*-coding:utf-8-*- 'aYAMLmodule' __author__='ChuaTony' importruamel.yaml #开档 withopen("人资.yaml","r",encoding="utf-8")asdocs: try: #alldata=ruamel.yaml.load(docs,Loader=ruamel.yaml.RoundTripLoader)#使用Loader=ruamel.yaml.RoundTripLoader alldata=ruamel.yaml.round_trip_load(docs) exceptruamel.yaml.YAMLErrorasexc: print(exc) #印出 fordatainalldata: print(alldata[data]['联络']) #修改 alldata['Tom']['联络'][0]['公司']='963852741' #写档 withopen('人资1.yaml','w+',encoding='utf8')asoutfile: #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文件后修改写入本地实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。