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语言介绍
- YAML 入门教程: https://www.runoob.com/w3cnote/yaml-intro.html
- YAML Ain’t Markup Language (YAML™) version 1.2: https://yaml.org/spec/1.2.2/#chapter-2-language-overview
- YAML 语言教程: https://www.ruanyifeng.com/blog/2016/07/yaml.html
python 操作yaml
- PyYAML Documentation https://pyyaml.org/wiki/PyYAMLDocumentation
到此这篇关于python处理yaml文件的操作方法的文章就介绍到这了,更多相关python处理yaml文件 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python pipreqs工具生成requirements.txt文件使用详解
这篇文章主要为大家介绍了python pipreqs工具生成requirements.txt文件使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-12-12
最新评论