首页 > 其他分享 >YAML+PyYAML笔记 2 | YAML缩进、分离、注释简单使用

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

时间:2023-07-28 10:04:25浏览次数:39  
标签:PyYAML name yaml app db 缩进 注释 YAML 泪要

(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'}

标签:PyYAML,name,yaml,app,db,缩进,注释,YAML,泪要
From: https://blog.51cto.com/NoamaNelson/6878409

相关文章

  • YAML+PyYAML笔记 3 | YAML集合、结构、标量、标记使用
    (3|YAML集合、结构、标量、标记使用)1集合YAML支持三种集合类型:列表,映射和集。1.1列表列表是一种序列结构,它使用连字符“-”表示;如下三个元素的列表,元素之间用“-”:fruit:-apple-rubber-pear使用Pyyaml解析:#解析withopen("config_jihe.yaml")asf:......
  • PHP 中优雅的将JSON/XML/YAML 等数据反序列化成指定的类对象
    这个小事情何以需要记上一笔?实在是因为当用了各种编程语言以后,发现系统I/O处,尤其对外的接口Interface最重要,它或许可以被称为Specification,规约。PHP是混合型编程风格的语言,不强求完全的OOP。但是代码不OOP化的话,又得不到更多的开发工具的支持。尤其在PHP中如果只是用数组结......
  • spring-boot-yaml的用法
    1.yaml简洁以数据为核心·基本语法大小写敏感数值前必须要有空格,作为分割符·数据格式对象数组(使用“-”表示数组每个元素)常量·参数引用$server:port:2023#数据的定义name:lisi#对象的定义person:name:${lisi}age:12......
  • yaml格式
       ......
  • dockercompose yaml命令行参数
    如何使用docker-compose的命令行参数1.确定所需的命令行参数在使用docker-compose命令行工具时,可以通过添加一些参数来自定义和控制容器的行为。以下是一些常见的命令行参数:参数描述-f,--file指定docker-compose文件的路径-p,--project-name指定项目的名称-......
  • filebeat.yaml(k8s configmap)部署清单
    apiVersion:v1kind:ConfigMapmetadata:name:bh-shard-2-filebeat-confignamespace:bluehelixlabels:app:bh-shard-2-testapp.kubernetes.io/managed-by:Helmchart:java-0.9.9heritage:Helmrelease:bluehelix-bh-shard-2data:......
  • kubectl apply -f mysql.yaml error: the path "mysql.yaml" does not exist
    问题解决:kubectlapply-fmysql.yamlerror:thepath"mysql.yaml"doesnotexist在使用Kubernetes进行容器编排时,我们经常使用kubectl命令行工具与Kubernetes集群进行交互。其中,kubectlapply命令用于创建或更新Kubernetes资源的配置文件。然而,有时在执行kubectlapply-fmys......
  • springboot——yaml格式
    ......
  • pytest + yaml 框架 -52.支持 websocket 协议
    前言v1.4.2版本支持websocket协议python操作websocket协议环境准备pip3installwebsocket-clientpip3installwebsockets基本代码示例fromwebsocketimportcreate_connectionimportjsonurl='ws://localhost:8081/ws'ws=create_connection(url,timeout......
  • 解决redis yaml配置的具体操作步骤
    实现RedisYAML配置概述在本文中,我们将介绍如何实现RedisYAML配置。Redis是一个开源的内存数据结构存储系统,常用于缓存和数据库。通过使用YAML配置文件,我们可以更方便地管理Redis的配置信息。步骤步骤操作第一步创建YAML配置文件第二步导入YAML解......