解决 Python ruamel.yaml 读写 yaml 文档 format 格式不一致问题

来源:互联网 发布:淘宝复制链接 编辑:程序博客网 时间:2024/06/11 05:55

使用 ruamel.yaml 过程中发现输入输出格式不一致,网上找到一个解决方案:

input:

ChuaTony:   公司: 文传  联络:     - 公司: '1422031030'    - 手机: '18650144578'    - 住家: '2233068479'  住址:     - 公司: 褔建。    - 住家: 台中。  交通: 无  附件: Tom:   公司: 天褔  联络:     - 公司: '1422031030'    - 手机: '18650123456'    - 住家: '2233061234'  住址:     - 公司: 褔建。    - 住家: 台北。  交通: 自行车  附件: 
output:
ChuaTony:  交通: 无  住址:  - 公司: 褔建。  - 住家: 台中。  公司: 文传  联络:  - 公司: '1422031030'  - 手机: '18650144578'  - 住家: '2233068479'  附件: nullTom:  交通: 自行车  住址:  - 公司: 褔建。  - 住家: 台北。  公司: 天褔  联络:  - 公司: '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.RoundTripLoaderalldata = 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.RoundTripDumperruamel.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'  住址:    - 公司: 褔建。    - 住家: 台北。  交通: 自行车  附件:

搞定!!!

0 0