yaml文件的格式和使用

目录

yaml的简介

yanl的语法格式

yaml文件的基本数据类型

纯量

列表格式:

字典格式

日期格式:

使用长字符串中的问题:

去除长字符串中的\n

给没一行结尾添加\n

数组

对象

yaml的使用

open()

with open()

打开文件的参数

下面我们上述读写操作进行几点补充说明:

常用文件操作方式


yaml的简介


  1. yaml文件是docker和Kubernetes(k8s) 的配置文件默认格式。
  2. yaml是一个可读性高,用来表达数据序列化的格式
  3. yaml是:YAML Ain`t Markuo Language(YAML不是一种标记语言)的递归缩写
  4. yaml可以转换成JSON  YML的格式  
  5. yaml文件 的格式是:文件名.yaml

yanl的语法格式


  1. 使用缩进表示层级关系
  2. 缩进的宫格数量不重要,只要相同层级的元素左对齐就可以
  3.  # 可以写注释
  4. yaml文件大小写敏感

yaml文件的基本数据类型


纯量

        纯量是基本的不可再分的值:字符串,布尔值,整数,浮点数,NULL,时间,日期


列表格式:
namelist:
  张三
  李四
  王五

字典格式
name: 张三
word: 我是世界之王
age: 18
日期格式:
# 日期格式  符合ISO 8601
date: 2023-09-20
# 时间格式 在日期之后加大写T加时间+时区
time: 2023-09-20T20:30:10+08:00

使用长字符串中的问题:

如何加入换行,如何取消换行,如何只要一个换行


# 在一个长的字符串中使用大于号来表示这是一个长的字符串。
singleLinestring1: >
  this is a very long string
  another line
  another line

使用python对该字符串读取

获得的结果


去除长字符串中的\n

这时候我发现在字符串结尾有一个\n的语法。这不符合我的预期。于是发现还有一种写法:

# 加入>-符号 会将\n符号去除
singleLinestring1: >-
  this is a very long string
  another line
  another line

结果:


给没一行结尾添加\n

另外一种情况:我想要在每一行结束加入一个换行符,怎么操作:

# 使用| 这个符号来标记获得每行结束加入一个换行符
singleLinestring1: |
  this is a very long string
  another line
  another line

结果如下


数组


数组的写法

namelist:
  -  张三
  -  李四
  -  王五
namelist2: [张三, 李四, 王五]

获得的值


对象

对象的写法:

herolist:
  hero1:
  -  name: 盖伦
     word: 德玛西亚万岁
     r: 大保健
  hero2:
  -  name: 嘉文
     word: 为了德玛西亚
     r:
       -  cd: 30
          now: 19

yaml的使用

open()

        open()打开文件需要关闭

import yaml  # 导入yaml的包

f = open("testyaml2.yaml", "r", encoding="utf-8")
data = yaml.safe_load(f)
print(data)
f.close()

with open()

  with open() 不需要特意关闭

import yaml  # 导入yaml的包

# 使用with open()as f: 方式打开文件,方法自带关闭文件功能。
# open的参数:第一个为打开的文件名,第二个是参数格式 第三个为编码格式
with open("testyaml2.yaml", "r", encoding="utf-8") as f:
    data = yaml.safe_load(f)
    print(data)

打开文件的参数

            


下面我们上述读写操作进行几点补充说明:

针对读r(read)类型,都要求操作文件必须已存在;

'r+' 表示可读可写(可读取,可写入),写入时,将追加在文件内容结尾。

‘a’表示追加写。只能执行写(追加在后面),不能读。

‘a+’表示追加读写。打开文件方式与写入方式和'a'一样,但是可以读。需要注意的是,如果是若刚用‘a+’打开一个文件,一般不能直接读取。


常用文件操作方式


print(f.readline())#打印第一行

print(f.readline(6))#打印前6个字符

print(f.readlines())#一次读取所有内容并按行返回list

print(f.tell())#打印当前指针位置

print(f.read())#一次性读取文件的全部内容,读完后,指针停留在结尾处。(文件较小时可以使用,当文件较大时,建议使用read(size)方法,该方法每次最多读取size个字节的内容)

print(f.seek( 0))# seek(0)表示将指针返回到文件头;文件如果要重头到尾再读,文件指针须先回到文件头(0-文件头,默认值;1-当前位置;2-文件尾)

print(f.read())#重读文件

print(f.encoding)#打印当前使用的字符编码

print(f.name)#打印文件名

print(f.flush())#刷新

f.truncate()#清空文件

f.truncate(12)#从头开始,第12个字符后截断并清除

f.close()#关闭文件


锚点

使用&+变量名来定义变量,使用*+变量名使用变量

dev:
  driveClaasName: &drive com.mysql
  type: &type com.alibaba
  userName: &userName root
# 在yaml中,重复的引用可以用&+变量名定义为参数 在引用时使用*+变量名即可
test:
  driveClaasName: *drive
  type: *type
  userName: *userName

这是获得的结果


引用

使用&+变量名在列表之外增加锚点

commd: &commd
  driveClaasName: &drive com.mysql
  type: &type com.alibaba

test:
  driveClaasName: *commd
  userName: root

dev:
  driveClaasName: com.mysql
  userName: root

结果

结论:

发现多了一格drivaClaasName的字段。

解决多字段的方法:

commd: &commd
  driveClaasName: &drive com.mysql
  type: &type com.alibaba
dev:
  <<: *commd
  userName: root

这样就解决了多字段的问题。

说明:

<<: *commd 作用是,告诉yaml,这个引用是将引用的参数拼接到这个位置。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pythonyaml文件格式是一种用于序列化和反序列化数据的文件格式YAML是一种人类可读的数据序列化格式,它使用简洁的语法来表示数据结构。YAML文件可以包含各种数据类型,包括字符串、数字、布尔值、列表和字典等。在Python中,可以使用yaml模块来读取和保存yaml文件。通过导入yaml模块,可以使用官方的导入方法来兼容Windows和Linux平台。使用yaml模块的load函数可以读取yaml文件的内容,并将其转换为Python对象。例如,可以使用以下代码读取一个yaml文件并打印其内容: ```python import yaml with open("test.yaml", "r") as yaml_file: data = yaml.load(yaml_file) print("data_type:", type(data)) print("data_content:\n", data) ``` 这段代码使用yaml模块的load函数来读取test.yaml文件的内容,并将其转换为Python对象。然后,可以通过打印data的类型和内容来查看读取到的数据。 #### 引用[.reference_title] - *1* [yaml——python数据序列化文件格式解析包的介绍和使用](https://blog.csdn.net/ZH13114130815/article/details/126930216)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [python基础——python解析yaml类型文件](https://blog.csdn.net/weixin_54696666/article/details/115034027)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值