Python学习之yaml文件的读取详解
作者:渴望力量的哈士奇 发布时间:2023-04-20 14:06:42
yaml 文件的应用场景与格式介绍
yaml 文件的应用场景
yaml其实也类似于 json、txt ,它们都属于一种文本格式。在我们的实际工作中, yaml 文件经常作为服务期配置文件来使用。 比如一些定义好的内容,并且不会修改的信息,我们就可以通过定义 yaml 文件,然后通过读取这样的文件,将数据导入到我们的服务中进行使用。
由于 yaml 文件一般作为配置文件使用,所以较少会修改。故而该章节,我们仅学习 yaml 文件的读取。
yaml 文件的格式
==首先大家需要知道,yaml 不是标记语言,跟 json 类似,yaml 的用途也是对数据进行序列化。(内容格式为键值对,但是与 dict 数据类型的键值对显示的样式有所区别)。内容格式人性化,较易读.==yaml 文件格式后缀为 .yaml。
注意:YAML 有一个小的怪癖。所有的 YAML 文件开始行都应该是 —。这是 YAML 格式的一部分, 表明一个文件的开始。>
YAML语法格式如下:
1、大小写敏感
2、使用缩进表示层级关系
3、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格
4、不支持Tab键制表符缩进,只使用空格缩进
5、字符后缩进一个空格,如冒号,逗号,短横杆(-)等
6、"—“表示YAML格式,一个文件的开始,用于分隔文件间
7、”#”表示注释 (yaml文件只有行注释)
YAML 支持的数据结构有三种。
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值
下面对这三种数据结构做详细介绍:
yaml 中的值有以下基本类型:
字符串
整形
浮点型
布尔型
null
时间
日期
yaml 文件内容格式示例如下:
# 注释
# 1-1、字典 键: 值
username: xiaoming # 冒号后面是空格
password: 123456
info: 配置 # 中文---不建议使用,有可能会乱码
# 1-2、字典嵌套
NAME_PSW:
name:xiaoming
password:123456
# 2-1、列表格式
-10
-20
-30
# 2-2、列表嵌套
-10
-20
-
-100
-200
# 3-1、列表中套字典
-10
-20
-
name: tom
password: 123456
# 4-1、字典套列表
name: TOM
info:
-10
-20
-30
# 5-1、引号 如果是有英文字母或者中文的,不加引号也是字符串
info: "HELLO word" # 引号可以不加
# 5-2、什么加引号:如果有特俗字符\n 不加引号就原字符样式输出 如果显示特殊字符效果:就加双引号
info: "HELLO\nwoord"
# 6-1、引用 一个数据可以使用很多地方,使用变量
# & 变量名 定义变量
# *变量名 引用变量
name: &a tom
name1: *a
# 7-1、能不能多个YAML 写在一起,有字典也有列表 ,加分隔符 ---
-10
-20
-30
---
name: sq
# 8-1、yamL文件可以有YAML
DATA: conf.yaml
第三方包 - pyyaml
pyyaml 的安装:pip install PyYAML [若安装失败,参考 - 包与模块 章节的 如何安装第三方包]
pyyaml 的导入:import pyyaml
读取 yaml 文件的方法
用法如下:
file = open(yaml_file, 'r')
daya = yaml.load(file.read())
file.close
返回字典类型(示例):
{
'name': '托尼·史塔克'
'age': '52'
'sex': 'man'
}
yaml文件读取演示案例
创建一个 test.yaml 文件,内容如下:
name:
托尼·史塔克 # 字符串引号可以不加 【这里的缩进使用的是tab键,所以如果直接复制粘贴,在运行下方脚本时会报错,记得改成空格】
invention:
- Iron Man Armor
- Arc reactor
- Ultron
teammate:
- Steven Rogers
- Thor Odinson
- Natasha Romanoff
- Bruce Banner
- Clint Barton
apprentice:
彼得·帕克
wife:
佩珀·波兹
father:
霍华德·史塔克
创建一个 test_yaml.py 文件,读取 test.yaml 文件:
# coding:utf-8
import yaml
def read(path):
with open(path, 'r') as file:
data = file.read()
result = yaml.load(data)
# result = yaml.load(data, Loader=yaml.FullLoader)
return result
if __name__ == '__main__':
result = read('test.yaml')
print(result)
这里执行的时候出现了一个报错 :TypeError: load() missing 1 required positional argument: 'Loader'。 如下图:
这是因为在 YAML 5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载器(FullLoader)禁止执行任意函数,该load函数也变得更加安全。所以我们需要将 result = yaml.load(data) 改为 result = yaml.load(data, Loader=yaml.FullLoader) 。
解决该 TypeError 不单单 只有 yaml.load(data, Loader=yaml.FullLoader) 这一个方法。
以下三选一即可解决该 TypeError
yaml.safe_load(file.read())
yaml.load(file.read(), Loader=yaml.FullLoader)
yaml.load(file.read(), Loader=yaml.CLoader)
运行结果如下:
来源:https://blog.csdn.net/weixin_42250835/article/details/123746762


猜你喜欢
- python numpy 中linspace函数numpy提供linspace函数(有时也称为np.linspace)是python中创建数
- 1、效果图2、操作步骤File->Setting->Editor->File and TemplateIncludes/*
- 不喜欢Python的人经常会吐嘈Python运行太慢。但是,事实并非如此。尝试以下六个窍门,来为你的Python应用提速。窍门一:关键代码使
- 第一种方法: Minimsdn.com为您提供的代码: -- Turn ON [Display IO Info when execute S
- 本文实例讲述了MySQL 事务概念与用法。分享给大家供大家参考,具体如下:事务的概念MySQL事务是一个或者多个的数据库操作,要么全部执行成
- 排序问题最近看了极客时间上 《MySQL实战45讲》,纠正了一直以来对 InnoDB 二级索引的一个理解不到位,正好把相关内容总结下。PS:
- django程序,需要写很多api,每个函数都需要几个装饰器,例如@csrf_exempt @require_POST 
- 新手在配置pytorch过程中总会或多或少遇到些问题,同时网上关于pytorch的环境配置琳琅满目,不知道应该按照哪个配置,这里笔者记录一下
- window.location="aaa.aspx" 上面的方法只能在当前页打开,如果要在新的页面打开,最简单的是用以下
- eval() 函数用来执行一个字符串表达式,并返回表达式的值。eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果。eval
- PyCharm2020 激活到 2100年一次激活,用到退休,就问你怕了没?超级硬核破解,从此不再找激活码,不再改HOST !!!!!Pyc
- temp.html<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti
- 1,SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了。在数据库工具下直接采用SQL
- 你也许已经掌握了id、class、后台选择器这些基本的css选择器。但这远远不是css的全部。下面向大家系统的解析css中30个最常用的选择
- 1. 说明本篇主要针对在Ubuntu系统中,matplotlib显示不了中文的问题,尤其是在无法安装系统
- 本意是为了和手写jdbc对照,不过不要和原来的手写连接重名。打开cmd,直接输入notepad就打开了记事本。jdk1.5之后不必配置cla
- 第一种方法:在php.ini文件里改变display_errors和error_reporting的值,没有的直接加上; 第一处修改; di
- 一、前期准备CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT,
- MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(
- 前言索引和切片是NumPy中最重要最常用的操作。熟练使用NumPy切片操作是数据处理和机器学习的前提,所以一定要掌握好。参考NumPy官方文