YAML教程-2-Python读写YAML文件

领取资料,咨询答疑,请➕wei:  June__Go

上一小节我们讲解了一下YAML文件的基本使用方法,本小节我们学习一下Python读写YAML文件的方法。

在Python中读写YAML文件,通常会使用PyYAML这个第三方库,因为它提供了与YAML格式交互的便捷方法。以下是使用PyYAML进行读写YAML文件的详细步骤和代码示例。

安装PyYAML

首先,你需要安装PyYAML库。你可以使用pip来安装它:

pip install pyyaml

读取YAML文件

要读取YAML文件,你可以使用yaml.safe_load()函数。这个函数会解析YAML文件,并返回一个Python数据结构(如字典或列表)。

import yaml

# 假设你有一个名为 'example.yaml' 的YAML文件
yaml_file = 'example.yaml'

with open(yaml_file, 'r') as file:
    data = yaml.safe_load(file)

# 打印解析后的数据
print(data)

写入YAML文件

要写入YAML文件,你可以使用yaml.dump()函数。这个函数接受一个Python数据结构,并将其转换为YAML格式,然后写入到文件中。

import yaml

# 假设你有一些要写入YAML文件的数据
data_to_write = {
    'name': 'John Doe',
    'age': 30,
    'married': True,
    'children': None
}

yaml_file = 'output.yaml'

with open(yaml_file, 'w') as file:
    yaml.dump(data_to_write, file, default_flow_style=False)

在这个例子中,default_flow_style=False参数会让YAML文件以块状格式(block style)输出,这通常更易读。

YAML文件示例

下面是一个简单的YAML文件example.yaml的例子:

# example.yaml
person:
  name: Kimi
  age: 25
  hobbies:
    - Reading
    - Coding
    - Hiking

使用上面提供的读取代码,你可以将这个YAML文件的内容读取到Python中,并进行操作。

注意事项

  • 使用safe_load()safe_dump()是为了防范潜在的执行风险,它们是PyYAML库中推荐使用的安全函数。
  • 在处理YAML文件时,确保YAML语法正确无误,否则可能会导致解析错误。
  • 在写入YAML文件时,default_flow_style参数可以控制输出的格式风格,False表示块状格式,True表示流式格式。

接下来是一个更复杂的例子,包括了嵌套的数据结构,以及如何在Python中处理这些数据。

读取复杂结构的YAML文件

假设我们有一个包含复杂数据结构的YAML文件complex_example.yaml

# complex_example.yaml
database:
  host: "localhost"
  port: 3306
  username: "root"
  password: "password"
  tables:
    - name: "users"
      columns:
        - name: "id"
          type: "integer"
        - name: "username"
          type: "varchar(255)"
    - name: "orders"
      columns:
        - name: "id"
          type: "integer"
        - name: "user_id"
          type: "integer"
          ref: "users.id"
        - name: "amount"
          type: "decimal(10,2)"

我们可以使用yaml.safe_load()函数来读取这个文件,并在Python中处理它:

import yaml

yaml_file = 'complex_example.yaml'

with open(yaml_file, 'r') as file:
    complex_data = yaml.safe_load(file)

# 打印整个数据库配置
print("Database Configuration:")
print(complex_data)

# 打印表信息
print("\nTables:")
for table in complex_data['database']['tables']:
    print(f"Table: {table['name']}")
    for column in table['columns']:
        print(f"  Column: {column['name']}, Type: {column['type']}")
        if 'ref' in column:
            print(f"  Reference: {column['ref']}")

这段代码会输出数据库的配置信息,以及每个表和其列的详细信息。

写入复杂结构到YAML文件

现在,假设我们要将一些新的表信息写入到YAML文件中。我们可以创建一个新的Python字典来表示这些数据,并使用yaml.dump()函数将其写入。

import yaml

# 新的表信息
new_table_data = {
    'database': {
        'tables': [
            {
                'name': 'products',
                'columns': [
                    {'name': 'id', 'type': 'integer'},
                    {'name': 'name', 'type': 'varchar(255)'},
                    {'name': 'price', 'type': 'decimal(10,2)'}
                ]
            }
        ]
    }
}

yaml_file = 'updated_complex_example.yaml'

with open(yaml_file, 'w') as file:
    yaml.dump(new_table_data, file, default_flow_style=False)

print(f"New table data has been written to {yaml_file}")

这段代码会在updated_complex_example.yaml文件中创建一个新的表products,并包含三个列idnameprice

注意事项

  • 在处理复杂的YAML文件时,确保你的Python字典结构与YAML文件的结构相匹配。
  • 在写入YAML文件时,使用default_flow_style=False可以让输出的YAML文件更易读。
  • 如果你的数据结构非常复杂,可能需要进行一些额外的处理,比如处理数据类型转换或特殊字符。
  • 在读取YAML文件时,如果文件中包含自定义的Python对象,你可能需要使用yaml.load()而不是yaml.safe_load(),并提供一个适当的构造函数来处理这些对象。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei:  June__Go

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/563186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前后端交互概念

前后端交互概念 1前后端分离开发概念2搭建后端环境2.1配置文件commomcommon-utilservice-utilmodelservice gitee使用 1前后端分离开发概念 前段:运用html、css、js和现成库,对数据作展示。 后端:运用Java和Java框架,提供数据或操…

数据结构10:堆和堆排序

文章目录 树的概念及结构树的概念树的相关概念树的表示树在实际中的应用表示文件系统的目录树结构 二叉树概念及结构概念特殊的二叉树二叉树的性质二叉树的存储结构顺序存储链式存储 二叉树的顺序结构及实现二叉树的顺序结构堆的概念及结构 堆的实现堆的插入堆的删除堆的创建向…

C# winfrom 超详细UI创建过程 实现双色球选号器UI界面设计过程

一、 效果展示 1. 无点击效果展示:不选中——双色球为灰色,字体也为灰色 2.点击双色器效果展示:选中——双色球为红或者蓝,字体为白色 二、 使用控件标注说明 三、界面特点介绍 双色球代码控制生成---------由于红色33个球&…

上位机工作感想-从C#到Qt的转变-1

0.前言 接触Qt开发也有一年多的时间了,还记得去年初从杭州回合肥时,刚来公司面临的几个问题: 1.C#转上位机的迷茫2.新公司管理模式的差异3.试用期的各种紧急任务。 当时也是加班加点学习C和Qt的基础知识,做了两个考核项目后&am…

生态短讯 | Tapdata 与 TDengine 完成产品兼容性互认证,打造物联网实时数据生态

近月,深圳钛铂数据有限公司(以下简称钛铂数据)自主研发的实时数据平台(Tapdata Live Data Platform)与北京涛思数据科技有限公司(以下简称涛思数据)自主研发的大数据平台 TDengine,已…

arm版Linux下安装大数据集群各种组件

背景:由于本人是用的Macbookpro m2来进行开发的,很多环境和Intel芯片的都不一样,期间安装各种软件遇到各种问题,为了以后不走之前的老路,现记录各种软件的安装步骤。 系统安装组件说明 序号组件名称组件版本1jdkjdk-…

SpringMvc的核心组件和执行流程

一、 springmvc的核心组件及作用 1.DispatcherServlet:前置控制器,是整个流程控制的核心,用来控制其他组件的执行,降低了其他组件的耦合性 2.Handler:控制器,完成具体的业务逻辑,当DispatcherServlet接收到请求后&am…

Linux华硕笔记本安装ROG Asusctl

基础环境 适用系统: linux mint 21ubuntu 22.04 安装版本: asusctl-5.0.10rust 1.77.2 构建 安装编译环境 sudo apt-get update sudo apt-get install -y \libasound2-dev \libfreetype6-dev \libexpat1-dev \libxcb-composite0-dev \libssl-dev …

mysql基础2——字段类型

整数类型 需要考虑存储空间和可靠性的平衡 浮点类型 浮点数类型不精准 将十进制数转换为二进制数存储 浮点数类型:float double real(默认是,double ) 如果需要将real设定为float ,那么通过以下语句实现 set sql_mode "real_as…

Token 在 LLM

大语言模型不能理解原始文本,所以需要把原始文本转换成大语言模型可以理解的数字表示形式,经过大模型处理以后,需要将该数字表示形式转换为人可以理解的文本。 原始文本到 token 原始文本转换为token序列的过程通常是在LLM的预处理阶段完成的。 在大型语言模型(LLM)中,tok…

restful请求风格的增删改查-----查询and添加

一、restful风格的介绍 restful也称之为REST ( Representational State Transfer ),可以将它理解为一种软件架构风格或设计风格,而不是一个标准。简单来说,restful风格就是把请求参数变成请求路径的一种风格。例如,传统的URL请求…

Windows bat实现循环往txt文件插入1000条数据内容

bat脚本实现: echo off for /L %%i in (1,1,1000) do (echo "I am from 192.168.10.171" >> c:\ztj.txt ) echo off --在批处理运行命令的时候不会一条一条的显示执行的命令 for /L %variable in (start,step,end) do command [command-p…

SQLite导出数据库至sql文件

SQLite是一款实现了自包含、无服务器、零配置、事务性SQL数据库引擎的软件库。SQLite是世界上部署最广泛的SQL数据库引擎。 SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。 SQLite 源代码不受版权限制。…

BST+二分

二叉搜索树 二叉查找树是指一棵有下列性质的[二叉树]: 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;任意节点的左、右…

《计算思维导论》笔记:《第10章 数据化思维-数据聚集与管理》计算思维第17讲-从表的管理看数据库

《大学计算机—计算思维导论》(战德臣 哈尔滨工业大学) 《计算思维第17讲-从表的管理看数据库----结构化与非结构化数据管理》 一、引言 今天我们从表的管理看数据库,给大家讲一下结构化与非结构化数据管理的思维。 二、为什么需要数据库–工…

ExpertPrompting:指导大语言模型成为杰出专家

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 论文标题:ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 论文地址:https://arxiv.org/abs/2305.14688 作者 & 机构:Benfen…

cd /op-bash: 无法为立即文档创建临时文件: 设备上没有空间

问题 在shell输入命令按tab键时出现以下报错 (base) [link999hadoop102 ~]$ cd /op-bash: 无法为立即文档创建临时文件: 设备上没有空间 -bash: cd: /op: 没有那个文件或目录原因分析 磁盘空间不够 df -Th # 通过命令查看具体情况解决 1、清理大文件 进入到 容量-已用 使…

【未完成】【QT+OpenCV】车牌号检测 学习记录 遇到的问题

【QTOpenCV】车牌号检测 学习记录 首先在QT里面配置好OpenCV .pro文件中加入: INCLUDEPATH G:/opencv/build/include LIBS -L"G:/opencv/build/x64/vc14/lib"\-lopencv_core \-lopencv_imgproc \-lopencv_highgui \-lopencv_ml \-lopencv_video \-lo.c…

【c++】stack和queue使用 stack和queue模拟实现

主页:醋溜马桶圈-CSDN博客 专栏:c_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1. stack的介绍和使用 1.1 stack的介绍 1.2 stack的使用 1.3 stack的模拟实现 2. queue的介绍和使用 2.1 queue的介绍 2.2 queue的…

react之组件与JSX

第一章 - 描述用户界面 概述:React是一个用于构建用户界面(UI)的JavaScript库,用户界面由按钮,文本和图像等小单元内容构建而成。React帮助你把它们组合成可重用,可嵌套的组件。从web端网站到移动端应用&a…