python讀取yaml文件后修改寫入本地實例
首先安裝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文件中的參數(shù)
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
補(bǔ)充知識:解決 Python ruamel.yaml 讀寫 yaml 文檔 format 格式不一致問題
使用 ruamel.yaml 過程中發(fā)現(xiàn)輸入輸出格式不一致,網(wǎng)上找到一個解決方案:
input:
ChuaTony: 公司: 文傳 聯(lián)絡(luò): - 公司: '1422031030' - 手機(jī): '18650144578' - 住家: '2233068479' 住址: - 公司: 褔建。 - 住家: 臺中。 交通: 無 附件: Tom: 公司: 天褔 聯(lián)絡(luò): - 公司: '1422031030' - 手機(jī): '18650123456' - 住家: '2233061234' 住址: - 公司: 褔建。 - 住家: 臺北。 交通: 自行車 附件:
output: ChuaTony: 交通: 無 住址: - 公司: 褔建。 - 住家: 臺中。 公司: 文傳 聯(lián)絡(luò): - 公司: '1422031030' - 手機(jī): '18650144578' - 住家: '2233068479' 附件: null Tom: 交通: 自行車 住址: - 公司: 褔建。 - 住家: 臺北。 公司: 天褔 聯(lián)絡(luò): - 公司: '963852741' - 手機(jī): '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]['聯(lián)絡(luò)'])
#修改
alldata['Tom']['聯(lián)絡(luò)'][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:縮進(jìn) block_seq_indent:區(qū)塊縮進(jìn)
output:
ChuaTony: 公司: 文傳 聯(lián)絡(luò): - 公司: '1422031030' - 手機(jī): '18650144578' - 住家: '2233068479' 住址: - 公司: 褔建。 - 住家: 臺中。 交通: 無 附件: Tom: 公司: 天褔 聯(lián)絡(luò): - 公司: '963852741' - 手機(jī): '18650123456' - 住家: '2233061234' 住址: - 公司: 褔建。 - 住家: 臺北。 交通: 自行車 附件:
搞定!?。?/p>
以上這篇python讀取yaml文件后修改寫入本地實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 中的 dataclass使用場景與代碼示例詳解
在Python中,dataclass是一個裝飾器,用于簡化類的定義,自動生成初始化、比較等方法,適用于需要存儲數(shù)據(jù)的場景,通過示例展示了dataclass的基本用法,感興趣的朋友跟隨小編一起看看吧2024-09-09
Pyspark獲取并處理RDD數(shù)據(jù)代碼實例
這篇文章主要介紹了Pyspark獲取并處理RDD數(shù)據(jù)代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03
python中使用(.)進(jìn)行相對路徑訪問文件的操作方法
在Python中,使用相對路徑訪問文件是一種常見的做法,尤其是在處理與腳本位于同一目錄或附近目錄的文件時,這篇文章主要介紹了python中使用(.)來進(jìn)行相對路徑訪問文件,需要的朋友可以參考下2024-05-05
Python2和Python3中print的用法示例總結(jié)
在Python 3中接觸的第一個很大的差異就是縮進(jìn)是作為語法的一部分,這和C++等其他語言確實很不一樣,所以要小心,其中python3和python2中print的用法有很多不同,這篇文章主要給大家介紹了關(guān)于Python2和Python3中print用法的相關(guān)資料,需要的朋友可以參考下。2017-10-10
python 實現(xiàn)批量xls文件轉(zhuǎn)csv文件的方法
今天小編就為大家分享一篇python 實現(xiàn)批量xls文件轉(zhuǎn)csv文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10

