YAML使用

本文介绍了YAML语言的基本规则及数据结构,并通过实例展示了如何使用YAML来组织和表示数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://blog.youkuaiyun.com/vincent_hbl/article/details/75411243

正如YAML所表示的YAML Ain’t Markup Language,YAML 是一种简洁的非标记语言。YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。

一边学习规则一边可以在在线Demo这个YAML转化JSON网页中进行上手练习

基本规则

YAML有以下基本规则: 
1、大小写敏感 
2、使用缩进表示层级关系 
3、禁止使用tab缩进,只能使用空格键 
4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。 
5、使用#表示注释 
6、字符串可以不用引号标注

三种数据结构

1、map,散列表 
使用冒号(:)表示键值对,同一缩进的所有键值对属于一个map,示例:

# YAML表示
age : 12
name : huang

# 对应的Json表示
{'age':12,'name':'huang'}

也可以将一个map写在一行:

# YAML表示
{age:12,name:huang}

# 对应的Json表示
{'age':12,'name':'huang'}

2、list,数组 
使用连字符(-)表示:

# YAML表示
- a
- b
- 12

# 对应Json表示
['a','b',12]

也可以写在一行:

# YAML表示
[a,b,c]

# 对应Json表示
[ 'a', 'b', 'c' ]

3、scalar,纯量 
数据最小的单位,不可以再分割。

数据结构嵌套

map和list的元素可以是另一个map或者list或者是纯量。由此出现4种常见的数据嵌套: 
1、map嵌套map

# YAML表示
websites:
 YAML: yaml.org 
 Ruby: ruby-lang.org 
 Python: python.org 
 Perl: use.perl.org 

# 对应Json表示
{ websites: 
   { YAML: 'yaml.org',
     Ruby: 'ruby-lang.org',
     Python: 'python.org',
     Perl: 'use.perl.org' } }

2、map嵌套list

# YAML表示
languages:
 - Ruby
 - Perl
 - Python 
 - c

# 对应Json表示
{ languages: [ 'Ruby', 'Perl', 'Python', 'c' ] }

3、list嵌套list

# YAML表示
-
  - Ruby
  - Perl
  - Python 
- 
  - c
  - c++
  - java

# 对应Json表示
[ [ 'Ruby', 'Perl', 'Python' ], [ 'c', 'c++', 'java' ] ]

除此以外,还可以如下表示该结构

# 方法2
- - Ruby
  - Perl
  - Python 
- - c
  - c++
  - java

# 方法3
- [Ruby,Perl,Python]
- [c,c++,java]

4、list嵌套map

# YAML表示
-
  id: 1
  name: huang
-
  id: 2
  name: liao

# 对应Json表示
[ { id: 1, name: 'huang' }, { id: 2, name: 'liao' } ]
### 如何在 Python 中通过 YAML 文件生成或使用随机变量 在 Python 中,可以通过 `PyYAML` 或其他类似的解析库加载 YAML 数据并对其进行修改。如果需要在 YAML 文件中定义随机变量,则可以在读取 YAML 文件后,在内存中动态生成这些随机值。 以下是实现这一功能的具体方式: #### 动态生成随机变量 可以利用 Python 的标准库模块 `random` 来生成随机数,并将其赋值给从 YAML 文件中提取的键值对。以下是一个完整的示例代码: ```python import yaml import random # 定义一个函数用于读取 YAML 文件 def read_yaml(file_path): with open(file_path, 'r', encoding='utf-8') as file: data = yaml.safe_load(file) return data # 定义一个函数用于写入 YAML 文件 def write_yaml(data, file_path): with open(file_path, 'w', encoding='utf-8') as file: yaml.dump(data, file, allow_unicode=True) # 主逻辑:读取 YAML 并更新其中的内容为随机值 file_path = 'test06.yaml' # 替换为您自己的 YAML 文件路径 data = read_yaml(file_path) # 更新特定字段为随机值 if isinstance(data.get('password'), list): # 如果密码是列表形式 data['password'][-1] = str(random.randint(1000, 9999)) # 修改最后一个元素为随机整数[^4] # 添加新的随机字段到 YAML 对象中 data['random_field'] = { 'rand_int': random.randint(1, 100), 'rand_float': round(random.uniform(1.0, 100.0), 2), 'rand_bool': random.choice([True, False]) } # 将更新后的数据重新写回 YAML 文件 write_yaml(data, file_path) ``` 上述代码实现了以下几个目标: 1. **读取 YAML 文件** 使用 `yaml.safe_load()` 方法将 YAML 文件转换成 Python 字典。 2. **生成随机值** 利用 `random` 模块生成不同的随机数值(如整数、浮点数和布尔值)。 3. **更新 YAML 数据结构** 在原生字典的基础上新增了一个名为 `random_field` 的键及其对应的随机值集合。 4. **保存更改至文件** 调用 `yaml.dump()` 函数将更新后的数据序列化为 YAML 格式并覆盖原始文件。 #### 关于 YAML 文件中的占位符替换 当 YAML 文件中存在占位符时,可采用如下策略完成其替代过程。例如对于引用[2]提到的情况,假设有一个环境变量或者固定模式作为输入源来决定最终的实际值。此时可通过遍历整个配置树形节点逐一查找匹配项进而实施替换成指定的新内容[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值