解决 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 ruamel.yaml 读写 yaml 文档 format 格式不一致问题)