python处理yaml文件的操作方法

 更新时间:2023年11月01日 09:44:49   作者:阿铃  
yaml文件是一种数据序列化语言,广泛用于配置文件、日志文件、等,本文给大家介绍python处理yaml文件的操作方法,感兴趣的朋友跟随小编一起看看吧

yaml文件简介

yaml 文件是一种数据序列化语言,广泛用于配置文件、日志文件、等

语言特点

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

yaml数据结构

yaml语言包含三种数据结构:

  • mappings (hashes/dictionaries) 对象
  • sequences (arrays/lists) 数组
  • scalars (strings/numbers) 纯量

以下是标记语言和转化为python 对象后的输出

数组

数组以 - 和 空格 来标记

- name1
- name2
- name3

output: 转为list

['name1', 'name2', 'name3']

对象

对象用: 和 空格 标识

name: Ling
email: ww.aa.com

output: 转为dict

{'name': 'Ling', 'email': 'ww.aa.com'}

数据对象混合

对象value为数组/ 对象

american:
- Boston Red Sox
- Detroit Tigers
- New York Yankees
national:
- New York Mets
- Chicago Cubs
- Atlanta Braves:
  - A
  - B

多维数组

-
  - Boston Red Sox
  - Detroit Tigers
  - New York Yankees
-
  - New York Mets
  - Chicago Cubs
  - Atlanta Braves

纯量

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期
boolean:
    - TRUE  #true,True,TRUE都可以
    - FALSE  #false,False, FALSE都可以
float:
    - 3.14
    - 6.8523015e+5  #可以使用科学计数法
int:
    - 123
    - 0b1010_0111_0100_1010_1110    #二进制表示
kongzhi:
    parent: ~  #使用~表示null
    class: null   #null也表示null
string:
    - 哈哈
    - 'Hello world: from this way'  #如果字符串之中包含空格或特殊字符,需要放在引号之中,可以使用双引号或者单引号包裹特殊字符
    - 写多行   #换行服会转义成空格
date:
    - 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
    - 2018-02-17 12:23:34  #标准带时间格式

output如下:

{'boolean': [True, False], 'float': [3.14, 685230.15], 'int': [123, 685230], 'kongzhi': {'parent': None, 'class': None}, 'string': ['哈哈', 'Hello world: from this way', '写多行'], 'date1': [datetime.date(2018, 2, 17), datetime.datetime(2018, 2, 17, 12, 23, 34)]}

注意上述date转换成python 字典后,转成json会报错

xx={'date1': [datetime.date(2018, 2, 17), datetime.datetime(2018, 2, 17, 12, 23, 34)]}
print(json.dumps(xx, indent=4))
# 运行错误如下:
TypeError: Object of type date is not JSON serializable

注释

注释以“#” 标识

- name1  #this is first name
- name2
- name3

锚点和引用

& 用来建立锚点,<< 表示合并到当前数据,* 用来引用锚点
举例如下:

defaults: &defaults
  adapter:  postgres
  host:     localhost
development:
  database: myapp_development
  <<: *defaults
test:
  database: myapp_test
  <<: *defaults

python操作yaml文件

安装工具包

pip install pyyaml

pyyaml官网文档

https://pyyaml.org/wiki/PyYAMLDocumentation

常用方法

这里的常用方法和 json 操作类似

将yml文件转换成 python中数据

由于 yaml.load() 方法不安全,建议使用yaml.safe_load() 函数

import yaml
# 直接打开文件,获取文件内容,转换成python dict 数据格式
# 这里要考虑关闭文件
file_data = open('./config/login_data.yaml')
data = yaml.load(file_data, yaml.SafeLoader)   # 相当于 safe_load 方法
print(data)
file1.close()
# 使用with 方法,可以不用手动关闭文件
# 这里设置encoding 是为了yaml 文件有中文时进行处理
with open('./config/login_data.yaml', encoding='utf-8') as f:
    elem_locators = yaml.safe_load(f)  # 传入的是 yaml字符串或者文件句柄
print(elem_locators)

将python数据转换成 写入yml 文件

使用 yaml.dump 函数,暂时不在此介绍

清空yaml文件

trucate()

yaml 常用的方法就是 读取、写入 和 清空

读取文件的内容
可以加多个fixtrue
可以加多个断言

注意点

yaml中有中文

如yaml中有中文,需要使用 字符串.encode('utf-8')或打开文件时指定encoding='utf-8'

参考链接

yaml语言介绍

python 操作yaml

到此这篇关于python处理yaml文件的操作方法的文章就介绍到这了,更多相关python处理yaml文件 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中encode和encoding的区别小结

    Python中encode和encoding的区别小结

    encode和encoding在Python中虽然都与字符编码相关,但它们的角色和用途是不同的,本文主要介绍了Python中encode和encoding的区别小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Matplotlib绘图基础之图例详解

    Matplotlib绘图基础之图例详解

    Matplotlib 中的图例是帮助观察者理解图像数据的重要工具,通常包含在图像中,用于解释不同的颜色、形状、标签和其他元素,下面我们就来看看在绘图时如何灵活运用图例吧
    2023-08-08
  • Python+PyQt5开发一个全屏水印批量添加工具

    Python+PyQt5开发一个全屏水印批量添加工具

    本文详细介绍了如何使用Python和PyQt5开发一个功能强大的全屏水印批量添加工具,支持PDF和多种图片格式,具备完整的GUI界面和批量处理能力,希望对大家有所帮助
    2025-09-09
  • python新手学习使用库

    python新手学习使用库

    在本篇文章里小编给大家整理的一篇关于python新手学习使用库的相关方法和知识点,需要的朋友们参考下。
    2020-06-06
  • pandas中DataFrame新增行及global变量的使用方式

    pandas中DataFrame新增行及global变量的使用方式

    这篇文章主要介绍了pandas中DataFrame新增行及global变量的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 用python实现前向分词最大匹配算法的示例代码

    用python实现前向分词最大匹配算法的示例代码

    这篇文章主要介绍了用python实现前向分词最大匹配算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 详解pandas使用drop_duplicates去除DataFrame重复项参数

    详解pandas使用drop_duplicates去除DataFrame重复项参数

    这篇文章主要介绍了详解pandas使用drop_duplicates去除DataFrame重复项参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 使用Python编写录屏录音工具

    使用Python编写录屏录音工具

    这篇文章主要为大家详细介绍了如何使用Python编写一个录屏录音工具,工具界面十分简单,默认是全屏录屏录音,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • 利用Python实现自动生成小学生计算题

    利用Python实现自动生成小学生计算题

    过年期间发现小外甥已经上小学了,我姐说老师今天给他们布置了寒假作业:每天坚持做乘法和加减法混合运算。这我必须帮帮忙,用Python写了一段自动生成小学生计算题的代码,希望外甥不要太感谢我
    2023-02-02
  • Python实现小黑屋游戏的完整实例

    Python实现小黑屋游戏的完整实例

    这篇文章主要给大家介绍了关于Python实现小黑屋游戏的完整实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论