YAML+PyYAML笔记 8 | PyYAML源码之full_load(),full_load_all(),safe_load

举报
虫无涯 发表于 2023/08/04 09:09:20 2023/08/04
【摘要】 1 yaml.full_load()源码:作用:解析流中的第一个YAML文档并生成相应的Python对象;解析所有标记,不包括那些在不受信任的输入中已知不安全的标记。解析:# config_yaml02.yaml如下:apiVersion: extensions/v1beta1kind: Deploymentmetadata: namespace: uat name: game-tes...

1 yaml.full_load()

  • 源码:
    在这里插入图片描述
  • 作用:解析流中的第一个YAML文档并生成相应的Python对象;解析所有标记,不包括那些在不受信任的输入中已知不安全的标记。
  • 解析:
# config_yaml02.yaml如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  namespace: uat
  name: game-test
  labels:
    app: game-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: game-test
  template:
    metadata:
      labels:
        app: game-test
    spec:
      containers:
      - name: game-test
        image: 192.168.1.5:5000/test/game-test:v1
        resources:
          limits:
            cpu: 1000m
            memory: 3000Mi
          requests:
            cpu: 500m
            memory: 1024Mi
        volumeMounts:
        - name: logs
          mountPath: /data/service/game-test/project/logs
        ports:
        - containerPort: 3008
        readinessProbe:
          tcpSocket:
            port: 3008
          initialDelaySeconds: 15
          periodSeconds: 15
        livenessProbe:
          tcpSocket:
            port: 3008
          initialDelaySeconds: 20
          periodSeconds: 20
      volumes:
      - name: logs
        hostPath:
          path: /tmp/logs
# pyyaml_full_load.py如下:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/7/28 
# 文件名称:pyyaml_full_load.py
# 作用:yaml.full_load()
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import yaml

with open('config_pyyaml02.yaml', 'r') as f:
    data = yaml.full_load(f)
print(data)
  • 输出:
{'apiVersion': 'extensions/v1beta1', 'kind': 'Deployment', 'metadata': 
{'namespace': 'uat', 'name': 'game-test', 'labels': {'app': 'game-test'}}, 
'spec': {'replicas': 1, 'selector': {'matchLabels': {'app': 'game-test'}}, 
'template': {'metadata': {'labels': {'app': 'game-test'}}, 'spec': 
{'containers': [{'name': 'game-test', 'image': '192.168.1.5:5000/test/game-test:v1', 'resources': {'limits': {'cpu': '1000m', 'memory': '3000Mi'}, 
'requests': {'cpu': '500m', 'memory': '1024Mi'}}, 'volumeMounts': [{'name': 'logs', 'mountPath': '/data/service/game-test/project/logs'}], 'ports': 
[{'containerPort': 3008}], 'readinessProbe': {'tcpSocket': {'port': 3008}, 'initialDelaySeconds': 15, 'periodSeconds': 15}, 'livenessProbe': {'tcpSocket': 
{'port': 3008}, 'initialDelaySeconds': 20, 'periodSeconds': 20}}], 'volumes': [{'name': 'logs', 'hostPath': {'path': '/tmp/logs'}}]}}}}

2 yaml.full_load_all()

  • 源码:
    在这里插入图片描述
  • 作用:解析流中的所有YAML文档并生成相应的Python对象;解析所有标记,不包括那些在不受信任的输入中已知不安全的标记。
  • 解析:
# config_yaml03.yaml如下:
---
user1:
  name: xiaoming
  age: 23
  password: 123456
---
user2:
  name: xiaozhang
  age: 24
  password: 123456
---
user3:
  name: xiaoli
  age: 25
  password: 123456
# pyyaml_full_load_all.py如下:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/7/28 
# 文件名称:pyyaml_full_load_all.py
# 作用:yaml.full_load_all()
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import yaml

f = open('config_pyyaml03.yaml', 'r')
docs = yaml.full_load_all(f)
for doc in docs:
    print(doc)
f.close()

  • 输出:
{'user1': {'name': 'xiaoming', 'age': 23, 'password': 123456}}
{'user2': {'name': 'xiaozhang', 'age': 24, 'password': 123456}}
{'user3': {'name': 'xiaoli', 'age': 25, 'password': 123456}}

3 yaml.safe_load()

  • 源码:
    在这里插入图片描述

  • 作用:

解析流中的第一个YAML文档,并生成相应的Python对象。只解析基本的YAML标记。这是已知的对于不可信的输入是安全的。

  • 解析:
# config_pyyaml04.yaml
{
    name: John Doe,
    age: 28,
    hobbies: [hiking, cooking, fishing],
    address:
        {
            city: New York,
            state: NY,
            street: 100 Main St,
            location:
                {
                 longitude: 40.712776,
                 latitude: -74.005974
                }
        },
    family:
        [
            {
                name: Jane,
                age: 25,
                relation: spouse
            },
            {
                name: Joe,
                age: 3,
                relation: son
            }
        ]
}
# pyyaml_safe_load.py
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/7/31 
# 文件名称:pyyaml_safe_load.py
# 作用:yaml.safe_load()
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import yaml

with open("config_pyyaml04.yaml") as f:
    data = yaml.safe_load(f)
print(data)
  • 输出:
{'name': 'John Doe', 'age': 28, 'hobbies': ['hiking', 'cooking', 'fishing'], 'address': {'city': 'New York', 'state': 'NY', 'street': '100 Main St', 'location': {'longitude': 40.712776, 'latitude': -74.005974}}, 'family': [{'name': 'Jane', 'age': 25, 'relation': 'spouse'}, {'name': 'Joe', 'age': 3, 'relation': 'son'}]}

4 yaml.unsafe_load()

  • 源码:
    在这里插入图片描述
  • 作用:

解析流中的第一个YAML文档,并生成相应的Python对象。解析所有标签,即使是已知的不受信任的输入不安全。

5 yaml.unsafe_load_all()

  • 源码:
    在这里插入图片描述
  • 作用:

分析流中的所有YAML文档,并生成相应的Python对象。解析所有标签,即使是已知的不受信任的输入不安全。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。