Python读写YAML文件

写入YAML文件

数据

info = {
    'name': 'root',
    'age': 18,
    'flag': True,
    'language': ['C', 'Java', 'Python'],
    'other': {
        'name': 'Apple',
        'date': '2021-08-03',
        'product': ['iMac', 'MacBook', 'iPad', 'iPhone']
    },
}

使用pyyaml

import yaml
with open('./test.yaml', 'w', encoding='utf8') as f:
    yaml.dump(info, f)

结果

正常写入, 但数据无序

age: 18
flag: true
language:
- C
- Java
- Python
name: root
other:
  date: '2021-08-03'
  name: Apple
  product:
  - iMac
  - MacBook
  - iPad
  - iPhone

使用ruamle

from ruamel import yaml

with open('./ruamel.yaml', 'w', encoding='utf8') as f:
    yaml.dump(info, f, Dumper=yaml.RoundTripDumper, default_flow_style=False, allow_unicode=True)

参数解释

Dumper=yaml.RoundTripDumper: 保证能够按照顺序保存

default_flow_style=False: False表示不保存默认格式, 列表和字典按照yaml的格式保存 而不是直接保存[]和{}

allow_unicode=True: 上传格式以unicode

结果

正常写入, 并且顺序与info的顺序完全一致

name: root
age: 18
flag: true
language:
- C
- Java
- Python
other:
  name: Apple
  date: '2021-08-03'
  product:
  - iMac
  - MacBook
  - iPad
  - iPhone

读取YAML文件

使用pyyaml

import yaml

with open('./test.yaml', 'r', encoding='utf8') as f:
    data = yaml.load(f, Loader=yaml.Loader)

结果

{'age': 18, 'flag': True, 'language': ['C', 'Java', 'Python'], 'name': 'root', 'other': {'date': '2021-08-03', 'name': 'Apple', 'product': ['iMac', 'MacBook', 'iPad', 'iPhone']}}

使用ruamel

from ruamel import yaml

with open('./ruamel.yaml', 'r', encoding='utf8') as f:
    data = yaml.load(f, Loader=yaml.RoundTripLoader)

结果

{'name': 'root', 'age': 18, 'flag': True, 'language': ['C', 'Java', 'Python'], 'other': ordereddict([('name', 'Apple'), ('date', '2021-08-03'), ('product', ['iMac', 'MacBook', 'iPad', 'iPhone'])])}

结论

综上比较, 推荐使用ruamel模块处理YAML文件

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值