YAML+PyYAML笔记 2 | YAML缩进、分离、注释简单使用

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: YAML+PyYAML笔记 2 | YAML缩进、分离、注释简单使用

1 简介

  • YAML 不是一种标记语言,而是一种数据格式;
  • 使用缩进和分离来表示数据结构,不需要使用额外的标记语言。

2 缩进

  • 使用缩进来表示嵌套关系;
  • 标识方式为使用空格;
  • 缩进必须使用相同数量的空格;
  • 比如以下每个列表项都由一个连字符开头,后面跟着一个空格;(每行都有相同数量的缩进,子项的缩进比父项的缩进多两个空格,以此表示嵌套关系)
 - name: noamanelson
  bolg: https://blog.csdn.net/NoamaNelson
  description: tester
  language:
    - python
    - c
    - c++
    - go
    - java
  operating_system:
    - linux
    - windows
 - name: xiaoming
  age: 88
  description: Old Monster
  • 输出为:
# 解析
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/7/27 
# 文件名称:yaml_read.py
# 作用:yaml读取
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

with open("config_suojin.yaml") as f:
    yaml_data2 = yaml.load(f, Loader=yaml.FullLoader)
print(yaml_data2)

# 输出
[{
   
   'name': 'noamanelson',
 'bolg': 'https://blog.csdn.net/NoamaNelson', 
 'description': 'tester', 
 'language': ['python', 'c', 'c++', 'go', 'java'], 
 'operating_system': ['linux', 'windows']}, 
 {
   
   'name': 'xiaoming',
  'age': 88, 
  'description': 'Old Monster'}]

3 分离

  • 使用分离表示键和值之间的关系;
  • 冒号用于分离键和值;
  • 冒号之后必须跟空格;
  • 示例:
author: libai
age: 未知
verse_title: 静夜思
content:
  one: 窗前明月光,
  two: 疑是地上霜.
  three: 举头望明月,
  four: 低头思故乡.
  • 解析:
with open("config_suojin.yaml") as f:
    yaml_data2 = yaml.load(f, Loader=yaml.FullLoader)
print(yaml_data2)

# 输出:
{
   
   'author': 'libai', 
'age': '未知', 
'verse_title': '静夜思', 
'content': {
   
   'one': '窗前明月光,', 'two': '疑是地上霜.', 'three': '举头望明月,', 'four': '低头思故乡.'}}

4 多行文本

  • 文本值比较长,需要占据多行,表示方式有以下:
    在这里插入图片描述

折叠块,字面块、引用块

4.1 折叠块

  • 折叠块将多行文本合并为一行;
  • 并删除行末的换行符和空格;
  • 使用垂直条>进行表示。
song: >
  曾经有一份真挚的爱情摆在我的面前
  我没有好好珍惜 等到失去时 才感到后悔
  如果老天能够再给我一次机会
  我回对那个女孩说 我爱你
  如果非要在这个爱上加个期限的话
  我希望是 一万年
  曾是你陪我 度过漫长的那么多天
  是你对我说还有真爱
  而我却不懂 如何呵护你
  爱你却伤了你的心
  就在我的心 刚要融化的时候
  而你却悄悄地离去
  我多希望你 希望你回心转意
  因为我将会把你珍惜
  还有什么话要说 还有多少泪要流
  难道你不知道 我对你的爱
  还有什么话要说 还有多少泪要流
  有一天我会让你回心转意

# 解析
{
   
   'song': '曾经有一份真挚的爱情摆在我的面前 我没有好好珍惜 等到失去时 才感到后悔 如果老天能够再给我一次机会 我回对那个女孩说 我爱你 如果非要在这个爱上加个期限的话 我希望是 一万年 曾是你陪我 度过漫长的那么多天 是你对我说还有真爱 而我却不懂 如何呵护你 爱你却伤了你的心 就在我的心 刚要融化的时候 而你却悄悄地离去 我多希望你 希望你回心转意 因为我将会把你珍惜 还有什么话要说 还有多少泪要流 难道你不知道 我对你的爱 还有什么话要说 还有多少泪要流 有一天我会让你回心转意\n'}

4.2 字面块

  • 字面块会原样输出多行文本;
  • 包括换行符和空格;
  • 用垂直条(|)进行表示。
song: |
  曾经有一份真挚的爱情摆在我的面前
  我没有好好珍惜 等到失去时 才感到后悔
  如果老天能够再给我一次机会
  我回对那个女孩说 我爱你
  如果非要在这个爱上加个期限的话
  我希望是 一万年
  曾是你陪我 度过漫长的那么多天
  是你对我说还有真爱
  而我却不懂 如何呵护你
  爱你却伤了你的心
  就在我的心 刚要融化的时候
  而你却悄悄地离去
  我多希望你 希望你回心转意
  因为我将会把你珍惜
  还有什么话要说 还有多少泪要流
  难道你不知道 我对你的爱
  还有什么话要说 还有多少泪要流
  有一天我会让你回心转意

# 解析
{
   
   'song': '曾经有一份真挚的爱情摆在我的面前\n我没有好好珍惜 等到失去时 才感到后悔\n如果老天能够再给我一次机会\n我回对那个女孩说 我爱你\n如果非要在这个爱上加个期限的话\n我希望是 一万年\n曾是你陪我 度过漫长的那么多天\n是你对我说还有真爱\n而我却不懂 如何呵护你\n爱你却伤了你的心\n就在我的心 刚要融化的时候\n而你却悄悄地离去\n我多希望你 希望你回心转意\n因为我将会把你珍惜\n还有什么话要说 还有多少泪要流\n难道你不知道 我对你的爱\n还有什么话要说 还有多少泪要流\n有一天我会让你回心转意\n'}

4.3 引用块

  • 引用会用到 &锚点符合和 *星号符号;
  • &用来建立锚点,<< 表示合并到当前数据, 用来引用锚点;
user: &useradd
  name: xiaozhang
  age: 20

dept:
  id: 12324343434
  <<: *useradd

#相当于:
user: 
  name: xiaozhang
  age: 20

dept:
  id: 12324343434
  name: xiaozhang
  age: 20
  • 文件内引用已经定义好的变量:
base.host: https://xxx.com
add.person.url: ${
   
   base.host}/person/add

5 注释

  • 分行内注释和块注释。

    5.1 行内注释

  • 行内注释用#符号
  • #符号后面的内容会被解析器忽略;
# 行内注释
name: xiaozhang # 这是name的值

5.2 块注释

  • 即多行注释;
#- name: noamanelson
#  bolg: https://blog.csdn.net/NoamaNelson
  description: tester
  language:
    - python
    - c
    - c++
    - go
    - java
#  operating_system:
#    - linux
#    - windows
#- name: xiaoming
#  age: 88
#  description: Old Monster
{
   
   'description': 'tester', 'language': ['python', 'c', 'c++', 'go', 'java']}

5.3 完美注释示例

# 配置文件
# 
# 下面是一些基本的设置
app.name: "app_demo" # 应用程序名称
app.host: "localhost" # 应用程序主机名
app.port: 8080 # 应用程序端口
app.debug: true # 是否输出调试信息

# 数据库配置项
# 
# 数据库地址
db.host: "localhost"
# 数据库端口号
db.port: 3306
# 数据库名
db.name: "database"
# 数据库用户名
db.user: "root"
# 数据库密码
{
   
   'app.name': 'app_demo', 'app.host': 'localhost', 'app.port': 8080, 'app.debug': True, 'db.host': 'localhost', 'db.port': 3306, 'db.name': 'database', 'db.user': 'root', 'db.password': '123456'}
目录
相关文章
|
4月前
|
机器学习/深度学习 计算机视觉 Python
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
154 0
|
安全 Python
YAML+PyYAML笔记 8 | PyYAML源码之full_load(),full_load_all(),safe_load(),unsafe_load(),unsafe_load_all()
YAML+PyYAML笔记 8 | PyYAML源码之full_load(),full_load_all(),safe_load(),unsafe_load(),unsafe_load_all()
138 1
|
Python
YAML+PyYAML笔记 7 | PyYAML源码之yaml.compose_all(),yaml.load(),yaml.load_all()
YAML+PyYAML笔记 7 | PyYAML源码之yaml.compose_all(),yaml.load(),yaml.load_all()
75 2
|
Python
YAML+PyYAML笔记 9 | PyYAML源码之dump(),dump_all(),safe_dump(),yaml.YAMLObject
YAML+PyYAML笔记 9 | PyYAML源码之dump(),dump_all(),safe_dump(),yaml.YAMLObject
133 0
YAML+PyYAML笔记 5 | YAML流样式、块样式、序列样式、Flow Mappings
YAML+PyYAML笔记 5 | YAML流样式、块样式、序列样式、Flow Mappings
63 0
YAML+PyYAML笔记 4 | YAML字符流、节点属性、块伸缩标头使用
YAML+PyYAML笔记 4 | YAML字符流、节点属性、块伸缩标头使用
67 0
YAML+PyYAML笔记 3 | YAML集合、结构、标量、标记使用
YAML+PyYAML笔记 3 | YAML集合、结构、标量、标记使用
96 0
|
3月前
|
JSON Kubernetes API
深入理解Kubernetes配置:编写高效的YAML文件
深入理解Kubernetes配置:编写高效的YAML文件
|
6月前
|
存储 运维 Serverless
函数计算产品使用问题之在YAML文件中配置了环境变量,但在PHP代码中无法读取到这些环境变量,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx