YAML+PyYAML笔记 7 | PyYAML源码之yaml.compose_all(),yaml.load(),yaml.load_all()

7 | PyYAML源码之yaml.compose_all,yaml.load,yaml.load_all

1 yaml.compose_all()

  • 源码:
    在这里插入图片描述
  • 作用:分析流中的所有YAML文档,并产生相应的表示树。
  • 解析:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/7/28 
# 文件名称:pyyaml_compose_all.py
# 作用:yaml.compose_all()
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import yaml

doc = """
---
user1:
  name: xiaoming
  age: 23
  password: 123456
---
user2:
  name: xiaozhang
  age: 24
  password: 123456
---
user3:
  name: xiaoli
  age: 25
  password: 123456
"""

trees = yaml.compose_all(doc)
for tree in trees:
    print(tree)
  • 输出:
MappingNode(tag='tag:yaml.org,2002:map', value=[(ScalarNode(tag='tag:yaml.org,2002:str', value='user1'), MappingNode(tag='tag:yaml.org,2002:map', value=[(ScalarNode(tag='tag:yaml.org,2002:str', value='name'), ScalarNode(tag='tag:yaml.org,2002:str', value='xiaoming')), (ScalarNode(tag='tag:yaml.org,2002:str', value='age'), ScalarNode(tag='tag:yaml.org,2002:int', value='23')), (ScalarNode(tag='tag:yaml.org,2002:str', value='password'), ScalarNode(tag='tag:yaml.org,2002:int', value='123456'))]))])
MappingNode(tag='tag:yaml.org,2002:map', value=[(ScalarNode(tag='tag:yaml.org,2002:str', value='user2'), MappingNode(tag='tag:yaml.org,2002:map', value=[(ScalarNode(tag='tag:yaml.org,2002:str', value='name'), ScalarNode(tag='tag:yaml.org,2002:str', value='xiaozhang')), (ScalarNode(tag='tag:yaml.org,2002:str', value='age'), ScalarNode(tag='tag:yaml.org,2002:int', value='24')), (ScalarNode(tag='tag:yaml.org,2002:str', value='password'), ScalarNode(tag='tag:yaml.org,2002:int', value='123456'))]))])
MappingNode(tag='tag:yaml.org,2002:map', value=[(ScalarNode(tag='tag:yaml.org,2002:str', value='user3'), MappingNode(tag='tag:yaml.org,2002:map', value=[(ScalarNode(tag='tag:yaml.org,2002:str', value='name'), ScalarNode(tag='tag:yaml.org,2002:str', value='xiaoli')), (ScalarNode(tag='tag:yaml.org,2002:str', value='age'), ScalarNode(tag='tag:yaml.org,2002:int', value='25')), (ScalarNode(tag='tag:yaml.org,2002:str', value='password'), ScalarNode(tag='tag:yaml.org,2002:int', value='123456'))]))])

2 yaml.load()

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

  • 作用:解析流中的第一个YAML文档,并生成相应的Python对象;

  • 解析:

# config_pyyaml.yaml如下:
user1:
  name: xiaoming
  age: 23
  password: 123456
user2:
  name: xiaozhang
  age: 24
  password: 123456
user3:
  name: xiaoli
  age: 25
  password: 123456

# pyyaml_load.py如下:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/7/28 
# 文件名称:pyyaml_load.py
# 作用:yaml.load()
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import yaml

with open('config_pyyaml.yaml', 'r') as f:
    data = yaml.load(f, Loader=yaml.FullLoader)

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

3 yaml.load_all()

  • 源码:
    在这里插入图片描述
  • 作用:解析流中的所有YAML文档并生成相应的Python对象;
  • 解析:
# config_pyyaml01.yaml如下:
---
user1:
  name: xiaoming
  age: 23
  password: 123456
---
user2:
  name: xiaozhang
  age: 24
  password: 123456
---
user3:
  name: xiaoli
  age: 25
  password: 123456
# pyyaml_load_all.py如下:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/7/28 
# 文件名称:pyyaml_load_all.py
# 作用:yaml.load_all()
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import yaml

f = open('config_pyyaml01.yaml', 'r')
docs = yaml.load_all(f, Loader=yaml.FullLoader)
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}}
Traceback (most recent call last): File "D:\PythonProject\test.py", line 10, in <module> yaml_info_dict = yaml.safe_load(f) File "D:\PythonProject\lib\site-packages\ruamel\yaml\main.py", line 1111, in safe_load return load(stream, SafeLoader, version) File "D:\PythonProject\lib\site-packages\ruamel\yaml\main.py", line 1063, in load return loader._constructor.get_single_data() File "D:\PythonProject\lib\site-packages\ruamel\yaml\constructor.py", line 111, in get_single_data node = self.composer.get_single_node() File "D:\PythonProject\lib\site-packages\ruamel\yaml\composer.py", line 70, in get_single_node document = self.compose_document() File "D:\PythonProject\lib\site-packages\ruamel\yaml\composer.py", line 92, in compose_document node = self.compose_node(None, None) File "D:\PythonProject\lib\site-packages\ruamel\yaml\composer.py", line 128, in compose_node node = self.compose_mapping_node(anchor) File "D:\PythonProject\lib\site-packages\ruamel\yaml\composer.py", line 209, in compose_mapping_node item_value = self.compose_node(node, item_key) File "D:\PythonProject\lib\site-packages\ruamel\yaml\composer.py", line 126, in compose_node node = self.compose_sequence_node(anchor) File "D:\PythonProject\lib\site-packages\ruamel\yaml\composer.py", line 170, in compose_sequence_node while not self.parser.check_event(SequenceEndEvent): File "D:\PythonProject\lib\site-packages\ruamel\yaml\parser.py", line 139, in check_event self.current_event = self.state() File "D:\PythonProject\lib\site-packages\ruamel\yaml\parser.py", line 527, in parse_block_sequence_entry if not self.scanner.check_token(BlockEntryToken, BlockEndToken): File "D:\PythonProject\lib\site-packages\ruamel\yaml\scanner.py", line 168, in check_token self.fetch_more_tokens() File "D:\PythonProject\lib\site-packages\ruamel\yaml\scanner.py", line 311, in fetch_more_tokens raise ScannerError( ruamel.yaml.scanner.ScannerError: while scanning for the next token found character '\t' that cannot start any token in "E:\yuanshuju\重点元数据提取配置.yaml", line 30, column 1
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虫无涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值