Python 基础 – 第三方模块PyYAML

导读:本篇文章讲解 Python 基础 – 第三方模块PyYAML,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

1. yaml基本示例 

2. yaml组织结构

3. pyyaml的安装

4. 读取 / 写入单个yaml文件

5. 读取 / 写入多yaml文件


yaml官方文档:YAML Ain’t Markup Language (YAML™) revision 1.2.2

pyyaml官方文档:https://pyyaml.org/wiki/PyYAMLDocumentation

1. yaml基本示例 

  • 列表 (Sequence of Scalars),用 – 值 来表示数组中的每个元素,其中字符串不用单独加引号来表示
- Apple
- Banana
- orange
  • Map集合-值是标量 (Mapping Scalars to Scalars):用冒号和空格来表示键值对
hr:  65  
avg: 0.278 
rbi: 147    
  • Map集合-值是列表 (Mapping Scalars to Sequences),#表示注释
american: 
- Boston Red Sox # 键值对中的值是列表
- Detroit Tigers
- New York Yankees
national:
- New York Mets
- Chicago Cubs
- Atlanta Braves
  • Map集合的列表 (Sequence of Mappings)
-
  name: Mark
  hr:   65
  avg:  0.278
-
  name: Sammy
  hr:   63
  avg:  0.288
  • 列表的列表 (Sequence of Sequences)
- [name , hr, avg  ]
- [Mark , 65, 0.278]
- [Sammy, 63, 0.288]
  • 集合的集合 (Mapping of Mappings)
Mark: {hr: 65, avg: 0.278}
Sammy: {
    hr: 63,
    avg: 0.288,
 }

其余很多我就不赘述了,包括与python不同的是对于mapping的key值有列表等形式,还是比较推荐大家去官方文档查看里面示例非常清楚了

2. yaml组织结构

一个yaml文件可以由一个或多个文档组成,文档之间使用“—作为分隔符。如果 yaml文件只包含一个文档,则”—“分隔符可以省略。”…”是一个文档的结束(非必须)。

 # 结束符的三个点可以省略
---
age: 20
player: Sammy
...
---
age: 21
player: Sammy
... 

3. pyyaml的安装

1. 因为pyyaml是第三方模块,所以推荐直接使用pip安装即可

pip install pyyaml

2. 如果pip没有安装成功,还可以通过源码安装

下载源包PyYAML-5.1.tar.gz并解压缩,进入PyYAML-5.1目录,运行如下命令:

python setup.py install

4. 读取 / 写入单个yaml文件

yaml.load(stream, Loader=None) 函数用于将一个yaml文档转换为一个python对象。yaml.load接受一个字符串、二进制文件或文本文件对象等。

如下为test.yaml文件内容

name:
  - wmq
  - hello
  - world  

使用yaml.load(stream, Loader=None) 读取文件内容。yaml 5.1版本后弃用了yaml.load(file)这个用法,因为该用法不安全,5.1版本之后通过FullLoader,使该load函数也变得更加安全

import yaml

if __name__ == "__main__":
    with open('./test.yaml', 'r', encoding='utf-8') as f:
	    data = yaml.load(stream=f, Loader=yaml.FullLoader)
	    print(data)  # {'name': ['wmq', 'hello', 'world']}

 写入文件内容使用yaml.dump(data, f),与python的json模块相似:

import yaml

if __name__ == "__main__":
    data = {'name': 'wmq','scores': [100, 90]}
    with open('./test.yaml', 'w', encoding='utf-8') as f:
	    yaml.dump(data, f)

5. 读取 / 写入多yaml文件

读文件使用yaml.load_all(),其中返回的是generator,可勇for循环或者next取值

import yaml

if __name__ == "__main__":
    with open('./test.yaml', 'r', encoding='utf-8') as f:
        all_data = yaml.load_all(stream=f, Loader=yaml.FullLoader)
        for data in all_data:
            print(data)

同理,将多个文件内容写入yaml文件使用 yaml.dump_all()

import yaml

if __name__ == "__main__":
    obj1 = {"name": "wmq", "age": 10}
    obj2 = {"name": "pkq", "age": 11}
    with open('./test.yaml', 'w', encoding='utf-8') as f:
        yaml.dump_all([obj1, obj2], f)

test.yaml文件结果如下:

#------------------test.yaml-------------
age: 10
name: wmq
---
age: 11
name: pkq

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/87440.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!