首页 > 其他分享 >玩转数据处理利器:学会使用 YAML 文件轻松处理数据

玩转数据处理利器:学会使用 YAML 文件轻松处理数据

时间:2024-01-23 14:48:33浏览次数:33  
标签:文件 yaml Python list YAML 玩转 使用 数据处理

测试管理班是专门面向测试与质量管理人员的一门课程,通过提升从业人员的团队管理、项目管理、绩效管理、沟通管理等方面的能力,使测试管理人员可以更好的带领团队、项目以及公司获得更快的成长。提供 1v1 私教指导,BAT 级别的测试管理大咖量身打造职业规划。

YAML文件处理

什么是YAML文件

YAML全称其实是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写,所以它强调的是数据本身,而不是以标记为重点。

YAML 是一种可读性非常高,与程序语言数据结构非常接近。同时具备丰富的表达能力和可扩展性,并且易于使用的数据标记语言。

为什么要使用YAML文件

其实YAML文件也是一种配置文件,但是相较于ini,conf配置文件来说,更加的简洁,操作简单,还能存放不同类型的数据,而像ini存储的值就都是字符串类型,读取之后还要手动转换。

YAML的基本语法规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。(可以将你的ide的tab按键输出替换成4个空格)
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • # 表示注释

YAML 的数据结构

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值

对象类型

对象的一组键值对,使用冒号结构表示,会转换成 Python 中的字典。

YAML:



animals:dog

Python:



{'animals': 'dog'}

YAML:



person:{name:Tom, age:20, gender:male}

Python:



{'person': {'name': 'Tom', 'age': 20, 'gender': 'male'}}

数组类型

数组类型使用 - 为前缀,每个元素独占一行,通过缩进关系表示层级包含关系,会转换成 Python 中的列表。

YAML:



-one-two-three-four-five

Python:



['one', 'two', 'three', 'four', 'five']

YAML:



--1-2-3--4-5-6

Python:



[[1, 2, 3], [4, 5, 6]]

纯量类型

纯量类型是最基本的、不可再分的值;类似基本数据类型。

  • 字符串, 不需要使用双引号包裹
  • 布尔值,true,True,false,False都可以
  • 整数
  • 浮点数
  • 时间,时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
  • 日期,日期必须使用ISO 8601格式,即 yyyy-MM-dd
  • Null,~ 表示 Null

YAML:



int: 12float: 12.3string: petsbool: trueNone: nulltime: 2001-12-14t21:59:43.10-05:00date: 2018-03-21

Python:



{   'int': 12,    'float': 12.3,    'string': 'pets',    'bool': True,    'None': None,    'time': datetime.datetime(2001, 12, 14, 21, 59, 43, 100000, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400))),    'date': datetime.date(2018, 3, 21)}

复杂结构

YAML:



cool_list:  - 10  - 15  - 12
hard_list:  - {key: value}  - [1,2,3]  - test:      - 1      - 2      - 3
twice_list:  -    - {a: AA}    - {b: BB}    - {c: CC}

Python:



{    'cool_list': [10, 15, 12],    'hard_list': [        {'key': 'value'},        [1, 2, 3],        {            'test': [1, 2, 3]        }    ],    'twice_list':[        [            {'a': 'AA'},            {'b': 'BB'},            {'c': 'CC'}        ]    ]}

Tips:有 : 后面的内容就解析成字典,有 - 后面的内容就解析成列表的元素

YAML 文件处理

Python 中,可以使用第三方模块 PyYAML 来处理 YAML 文件。

安装 PyYAML 模块



pip install pyyaml

读取 YAML 文件

YAML 模块使用 safe_load() 方法读取 yaml 文件,在读取文件之前,和普通文件一样,需要先将文件打开。



import yaml
# 读取 YAML 文件, 以前面复杂结果数据为例with open('data.yaml', 'r') as file:    data = yaml.safe_load(file)
# 处理读取到的数据print(data['cool_list'])print(data['hard_list'][2]['test'])

写入 YAML 文件

YAML 模块使用 safe_dump() 方法向 yaml 文件中写入数据,在写入文件之前,也需要先将文件打开。



import yaml
# 要写入的数据data = {    'key1': 'value1',    'key2': 'value2',    'key3': {        'key4': 'value4'    }}
# 写入 YAML 文件with open('output.yaml', 'w') as file:    yaml.safe_dump(data, file)

标签:文件,yaml,Python,list,YAML,玩转,使用,数据处理
From: https://www.cnblogs.com/hogwarts/p/17982417

相关文章

  • NumPy数据处理基础
    Panadas数据处理基础一、数据结构NumPy中主要有多维数组和矩阵结构。1.1、利用array()函数创建数组numpy.array(object,dtype=None,*,copy=True,order='K',subok=False,ndmin=0,like=None)----object参数来创建数组类型的对象----dtype参数表示数组元素的类型----copy用......
  • Java开发之Java8 新特性--流式数据处理学习
    一.流式处理简介在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现。比如我们希望对一个包含整数的集合中筛选出所有的偶数,并将其封装成为一个新的List返回,那么在java8之前,我们需......
  • 快速玩转 Mixtral 8x7B MOE大模型!阿里云机器学习 PAI 推出最佳实践
    作者:熊兮、贺弘、临在Mixtral8x7B大模型是MixtralAI推出的基于decoder-only架构的稀疏专家混合网络(Mixture-Of-Experts,MOE)开源大语言模型。这一模型具有46.7B的总参数量,对于每个token,路由器网络选择八组专家网络中的两组进行处理,并且将其输出累加组合,在增加模型参数总量的同时,优......
  • 玩转ig之Instagram蓝勾认证教程与条件
    蓝勾是 Instagram 用于身份验证的标志,它表明你的账号是真实且唯一的。拥有蓝勾的账号在 Instagram 上更容易引起关注。用户会比较倾向于信任与被认证的账号,因为他们认为这些账号具有更高的权威性和公信力。所以对于品牌来说,想要在 Instagram 上获得更好的营销效果,蓝勾认证是......
  • Import yaml ModuleNotFoundError No module named 'yaml
    ImportyamlModuleNotFoundError:Nomodulenamed'yaml'Python错误信息:ModuleNotFoundError异常,具体错误是找不到名为yaml的模块。这意味着在执行导入语句importyaml时,Python解释器没有在你的环境里找到这个模块。yaml是一个用于处理YAML数据格式的库,如果你在代码中需要解......
  • 人人都会Kubernetes(一):告别手写K8s yaml,运维效率提升500%
    1.Kubernetes的普及和重要性随着云计算的迅速发展,容器化技术已成为构建和运行分布式应用程序的关键。而Kubernetes作为容器编排领域的佼佼者,已经成为了云原生应用的标准。它不仅简化了应用程序的部署和管理,而且为开发者和运维人员提供了一套全面的工具集,从容器编排、自动扩缩容......
  • 人人都会Kubernetes(一):告别手写K8s yaml,运维效率提升500%
    1.Kubernetes的普及和重要性随着云计算的迅速发展,容器化技术已成为构建和运行分布式应用程序的关键。而Kubernetes作为容器编排领域的佼佼者,已经成为了云原生应用的标准。它不仅简化了应用程序的部署和管理,而且为开发者和运维人员提供了一套全面的工具集,从容器编排、自动扩缩容、......
  • 【笔记-MySql】数据处理语句
    【笔记-MySql】数据处理语句语句参数聚合函数{count|max|min|sum|avg|...}比较运算符{=|<>|!=|<|<=|>|>=}--<>:早期符号,等同于!=,据说移植和性能略优。条件描述{--将当前值作为条件<columnName>{比较运算符<value>|--......
  • Dating Java8系列之并行数据处理
    翎野君/文  分支合并框架 分支合并框架介绍分支/合并框架的目的是以递归的方式将可以并行的任务拆分成更小的任务,然后将每个子任务的结果合并起来生成整体结果。它是ExecutorService接口的一个实现,它把子任务分配给线程池(称为ForkJoinPool)中的工作线程。把任务提交......
  • 玩转Redis:哨兵模式揭秘,带你骑上“哨兵战车”
    摘要:大家好!今天我们要聊一聊Redis的哨兵模式。说到Redis,相信很多人都对它的高性能、高可靠性留下了深刻的印象。而在这众多强大的功能中,哨兵模式无疑是一个备受关注的话题!哨兵模式在Redis中的作用就像是一支战车部队,能够时刻监控并保护我们的Redis集群。当集群中的某个主节点发生......