Python yaml 详解

news2024/11/25 0:50:03

文章目录

  • 1 概述
    • 1.1 特点
    • 1.2 导入
  • 2 对象
    • 2.1 字典
    • 2.2 数组
    • 2.3 复合结构
  • 3 操作
    • 3.1 读取
    • 3.2 写入

1 概述

1.1 特点

  • yaml 文件是一种数据序列化语言,广泛用于配置文件、日志文件等
  • 特点:
    • 大小写敏感
    • 使用缩进表示层级关系。缩进时不允许使用 Tab 键,只允许使用空格。缩进的空格数目不重要,只要相同层级的元素左侧对其即可。

1.2 导入

> pip install pyyaml

pyyaml 是第三方库,需要导入
扩展:Python 安装第三方库详解:https://blog.csdn.net/qq_34745941/article/details/106341898

2 对象

2.1 字典

# 格式1: 单个字典
key: value

# 格式2:多维字典
key:
 child-key: value
 child-key2: value2
  • 如:新建 “Demo.yaml” 文件,并输入下列配置
database:
  host: localhost
  port: 1521
  username: user
  passwoed: 123

在这里插入图片描述

输出测试:(以多维字典为例)

import yaml

fileName = 'Demo.yaml'

# Loader 制定使用 yaml.FullLoader 解析器,更加安全
with open(fileName, mode='r', encoding='utf-8') as file:
    config = yaml.load(file, Loader=yaml.FullLoader)
    print(config)
    print(config['database']['username'])

输出结果:

{'database': {'host': 'localhost', 'port': 1521, 'username': 'user', 'passwoed': 123}}
user

2.2 数组

# 格式1:单个数组
- A
- B
- C

# 格式2: 多维数组
-
 - key1
 - key2
-
 - value1
 - value2

输出测试:(以多维数组为例)

import yaml

fileName = 'Demo.yaml'

# Loader 制定使用 yaml.FullLoader 解析器,更加安全
with open(fileName, mode='r', encoding='utf-8') as file:
    config = yaml.load(file, Loader=yaml.FullLoader)
    print(config)
    print(config[0])

输出结果:

[['key1', 'key2'], ['value1', 'value2']]
['key1', 'key2']

2.3 复合结构

langusges:
 - Java
 - Python
 - Sql

person:
 name: 张三
 age: 18

输出测试:

import yaml

fileName = 'Demo.yaml'

# Loader 制定使用 yaml.FullLoader 解析器,更加安全
with open(fileName, mode='r', encoding='utf-8') as file:
    config = yaml.load(file, Loader=yaml.FullLoader)
    print(config)

输出结果:

{'langusges': ['Java', 'Python', 'Sql'], 'person': {'name': '张三', 'age': 18}}

3 操作

3.1 读取

import yaml

fileName = 'Demo.yaml'

# Loader 制定使用 yaml.FullLoader 解析器,更加安全
with open(fileName, mode='r', encoding='utf-8') as file:
    config = yaml.load(file, Loader=yaml.FullLoader)
    print(config)

3.2 写入

import yaml

fileName = 'Demo.yaml'

users = [{'name': '张三', 'age': 18},
         {'name': '李四', 'age': 19}]

with open(fileName, mode='w', encoding='UTF-8') as file:
    yaml.dump(users, file, sort_keys=False, allow_unicode=True)

输出结果:

- name: 张三
  age: 18
- name: 李四
  age: 19

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【VastbaseG100】 FATAL: The account has been locked.

使用VastbaseG100 数据库,查询数据报错。 org.postgresql.util.PSQLException: FATAL: The account has been locked. 帐户已被锁定。 解锁账户呗 ALTER ROLE doc ACCOUNT UNLOCK;ALTER ROLE 用户名 ACCOUNT UNLOCK; 修改密码 ALTER ROLE doc IDENTIFIED BY ZhangS…

【实战项目之个人博客】

目录 项目背景 项目技术栈 项目介绍 项目亮点 项目启动 1.创建SSM(省略) 2.配置项目信息 3.将前端页面加入到项目中 4.初始化数据库 5.创建标准分层的目录 6.创建和编写项目中的公共代码以及常用配置 7.创建和编写业务的Entity、Mapper、…

【操作系统笔记】并发安全问题

用户态抢占和内核态抢占 内核中可以执行以下几种程序: ① 当前运行的进程:陷阱程序(系统调用) 和 故障程序(page fault) ,进程运行在内核态的时候,其实就是在执行进程在用户态触发的…

Qt使用I.MX6U开发板上的按键(原理:将电脑键盘方向键↓在Qt中的枚举值与开发板中按键定义的枚举值一致,这样电脑端测试效果就与开发板的一致)

在上篇介绍了Qt点亮I.MX6U开发板的一个LED,对于Qt控制I.MX6U开发板的一个蜂鸣器原理也是一样的,就不做详细介绍,具体可参考Qt控制I.MX6U开发板的一个蜂鸣器,本篇介绍Qt使用I.MX6U开发板上的按键的相关内容。 文章目录 1. 开发板硬…

第一个 Go 程序“hello,world“ 与 main 函数

第一个 Go 程序"hello,world" 与 main 函数 文章目录 第一个 Go 程序"hello,world" 与 main 函数一.创建“hello,world”示例程序二. “hello,world” 程序结构拆解三、main 函数四、Go 语言中程序是怎么编译…

selenium+python实现基本自动化测试

安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回…

坚鹏:浙江农商联合银行同业核心产品解读与差异化分析培训第7期

浙江农商联合银行同业核心产品解读与差异化分析培训第7期 1952年,浙江第一家农村信用社成立。2004年4月18日,浙江省农信联社成立,承担对全省农信社的管理、指导、协调和服务职能。2021年10月,经国务院批准同意、银保监会批复&…

多目标优化算法:基于非支配排序的鱼鹰优化算法(NSOOA)MATLAB

一、鱼鹰优化算法 鱼鹰优化算法(Osprey optimization algorithm,OOA)由Mohammad Dehghani 和 Pavel Trojovsk于2023年提出,其模拟鱼鹰的捕食行为。 Python:鱼鹰优化算法(Osprey optimization algorithm&a…

自动驾驶中的决策规划

参考: 【干货篇】轻舟智航:自动驾驶中的决策规划技术(附视频回放 PPT 下载) - AIQ 如图所示, 各模块介绍 定位模块主要负责解答的问题是“车现在在哪里”,是在道路上还是在路口,是在高架桥上还是在停车场里。 感知…

图像锐化,求图像锐化后的图像(数字图像处理大题复习 P6)

文章目录 1. 梯度差分方法 & 罗伯特差分法梯度差分方法罗伯特差分法使用梯度差分法解决本题 2. 有阈值 (T4) 的二值图像输出 用不同图像输出方法求图像锐化后的图像 g(x, y) 梯度图像直接输出设阈值 T4,求二值图像输出 1. 梯度差分方法 & 罗伯特差分法 梯度…

C++ Qt零基础入门进阶与企业级项目实战教程与学习方法分享

Qt是一个卓越的客户端跨平台开发框架,可以在Windows、Linux、macOS进行客户端开发,无缝切换,一统三端;当然除了桌面端,在移动端的早期,Qt也展现了其多才多艺,在Android和ios也可以使用Qt编写app…

外部打开微信小程序支付,H5 、APP

手机浏览器H5打开微信小程序支付,自定义传参_h5调起微信小程序支付_我是小木木的博客-CSDN博客H5网站打开小程序,调用小程序支付功能_h5调起微信小程序支付https://blog.csdn.net/chen_mumu119/article/details/132104048

**20.迭代器模式(Iterator)

意图:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 上下文:集合对象内部结构常常变化各异。对于这些集合对象,能否在不暴露其内部结构的同时,让外部Client透明地访问其中包含的元素…

大数据+大模型的尽头——数据分析师的未来会怎样?

大数据大模型的尽头一定是干掉数据分析师吗? | 近匠

12:STM32---RTC实时时钟

目录 一:时间相关 1:Unix时间戳 2: UTC/GMT 3:时间戳转化 二:BKP 1:简历 2:基本结构 三: RTC 1:简历 2: 框图 3:RTC基本结构 4:RTC操作注意 四:案例 A:读写备份寄存器 1:连接图 2: 步骤 3: 代码 B:实时时钟 1:连接图 2:函数介绍 3:代码 一:时间相关 1:Un…

如何与Linamar Corp 建立EDI连接?

Linamar Corp(以下简称Linamar)是一家全球领先的汽车零部件制造商,总部位于加拿大。随着业务的不断扩展,Linamar 需要与其供应商、分销商和合作伙伴之间实现更高效的业务交流和数据共享。为了提高业务流程的自动化水平&#xff0c…

1.虚拟机无法连接网络,且无法ping通的问题解决

1.介绍 今天操作Jedis连接虚拟机的redis数据库时,连接不上,找了很多解决方案,都解决不了,最后发现是虚拟机的配置问题,虚拟机无法连接网络,且没有设置本机ip地址,所以ifconfig的根本就查不出ip…

C++之智能指针类型转换应用总结(二百二十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

数据结构:线性表之-队列

目录 什么是队列? 详解: 功能介绍 代码实现 定义队列基本结构 1,初始化 2, 销毁 3,尾入数据 4,头出数据 5,取队头的数据 6,取队尾的数据 7,判断是否为空 8,计算队列中的元素 成品 Queue.h Queue.c test.c 队列的讲解将建立在…

Oracle使用遇到的问题

一、Navicat 连接Orcle提示 Oracle library is not loaded 1.前往官网下载客户端 http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html 2.选择与系统匹配的“Instant Client”和sqlpus。