Python基础教程

011_Python读写yml文件

Python读写yml文件

json格式是一种数据格式约定,来自于JavaScript语言。因为使用方便,所以Python也实现了json格式的读写。

yml是另一种数据格式约定,很多语言都支持,Python当然也支持(第三方库)。

yml是什么格式

YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。

YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。

Python第三方库提供了yml格式的操作支持(https://github.com/yaml/pyyaml)。

来看一个yml格式例子

addr: beijing
age: 18
comp:
- comp1
- comp2
- comp3
love:
  age: 16
  name: xiaofang
name: zhangsan

这是什么呀?

确实,yml格式太难读懂了。它比json格式还简单,但比json更难读懂。

基本语法:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

支持以下几种数据类型:

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值

总之,有以下几点需要掌握。

  • yml主要表示键值对信息
  • 嵌套信息只用空格缩进,不用tab,也不需要大括号
  • 数组元素前面用横杠“-”表示

第三方库的安装(Python3)

pip  install pyyaml

Python读写yml主要方法

Python读写yml格式主要有两个函数。

  • 生成yml文本:yaml.dump()
  • 读取yml文本:yaml.load()

此操作函数针对数据流,包括内存中的数据,也包括文件数据。

Python写入yml

将Python字典对象转换成yml字符串,示例如下。

import yaml

# 定义字典对象
adict={
  "name": "zhangsan",
  "addr": "beijing",
  "comp": ["comp1","comp2","comp3"],
  "age": 18,
  "love": {
      "name": "xiaofang",
      "age": 16
  }
}

# 转换成yml字符串
ayml=yaml.dump(adict)
print(ayml)

# 转换成yml字符串并写入文件
with open("mydata.yml","w") as f:
    yaml.dump(adict,f)

程序运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/atestpkg/t14.py
addr: beijing
age: 18
comp:
- comp1
- comp2
- comp3
love:
  age: 16
  name: xiaofang
name: zhangsan

Process finished with exit code 0

生成的文件为文本文件mydata.yml。

Python读取yml

下面来看读取yml文件的例子,读取Python中转为字典对象。

import yaml

# 打开yml文件,读取文件数据流
with open("mydata.yml","r") as f:
    ayml=yaml.load(f.read(),Loader=yaml.Loader)
    print(type(ayml))
    print(ayml)
    print(ayml["love"])

运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/atestpkg/t15.py
<class 'dict'>
{'addr': 'beijing', 'age': 18, 'comp': ['comp1', 'comp2', 'comp3'], 'love': {'age': 16, 'name': 'xiaofang'}, 'name': 'zhangsan'}
{'age': 16, 'name': 'xiaofang'}

Process finished with exit code 0
这篇文章对您有用吗? 1

我们要如何帮助您?