目录
yaml 文件的应用场景与格式介绍yaml 文件的应用场景yaml 文件的格式第三方包 - pyyaml读取 yaml 文件的方法yaml文件读取演示案例yaml 文件的应用场景与格式介绍
yaml 文件的应用场景
yaml其实也类似于 json、txt ,它们都属于一种文本格式。在我们的实际工作中, yaml 文件经常作为服务期配置文件来使用。 比如一些定义好的内容,并且不会修改的信息,我们就可以通过定义 yaml 文件,然后通过读取这样的文件,将数据导入到我们的服务中进行使用。
由于 yaml 文件一般作为配置文件使用,所以较少会修改。故而该章节,我们仅学习 yaml 文件的读取。
yaml 文件的格式
==首先大家需要知道,yaml 不是标记语言,跟 json 类似,yaml 的用途也是对数据进行序列化。(内容格式为键值对,但是与 dict 数据类型的键值对显示的样式有所区别)。内容格式人性化,较易读.==yaml 文件格式后缀为 .yaml。
注意:YAML 有一个小的怪癖。所有的 YAML 文件开始行都应该是 —。这是 YAML 格式的一部分, 表明一个文件的开始。>
YAML语法格式如下:
1、大小写敏感
2、使用缩进表示层级关系
3、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格
4、不支持Tab键制表符缩进,只使用空格缩进
5、字符后缩进一个空格,如冒号,逗号,短横杆(-)等
6、"—“表示YAML格式,一个文件的开始,用于分隔文件间
7、”#”表示注释 (yaml文件只有行注释)
YAML 支持的数据结构有三种。
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值
下面对这三种数据结构做详细介绍:
yaml 中的值有以下基本类型:
字符串整形浮点型布尔型null时间日期yaml 文件内容格式示例如下:
# 注释 # 1-1、字典 键: 值 username: xiaoming # 冒号后面是空格 password: 123456 info: 配置 # 中文---不建议使用,有可能会乱码 # 1-2、字典嵌套 NAME_PSW: name:xiaoming password:123456 # 2-1、列表格式 -10 -20 -30 # 2-2、列表嵌套 -10 -20 - -100 -200 # 3-1、列表中套字典 -10 -20 - name: tom password: 123456 # 4-1、字典套列表 name: TOM info: -10 -20 -30 # 5-1、引号 如果是有英文字母或者中文的,不加引号也是字符串 info: "HELLO word" # 引号可以不加 # 5-2、什么加引号:如果有特俗字符\n 不加引号就原字符样式输出 如果显示特殊字符效果:就加双引号 info: "HELLO\nwoord" # 6-1、引用 一个数据可以使用很多地方,使用变量 # & 变量名 定义变量 # *变量名 引用变量 name: &a tom name1: *a # 7-1、能不能多个YAML 写在一起,有字典也有列表 ,加分隔符 --- -10 -20 -30 --- name: sq # 8-1、yamL文件可以有YAML DATA: conf.yaml
第三方包 - pyyaml
pyyaml 的安装:pip install PyYAML [若安装失败,参考 - 包与模块 章节的 如何安装第三方包]
pyyaml 的导入:import pyyaml
读取 yaml 文件的方法
用法如下:
file = open(yaml_file, "r") daya = yaml.load(file.read()) file.close
返回字典类型(示例):
{ "name": "托尼·史塔克" "age": "52" "sex": "man" }
yaml文件读取演示案例
创建一个 test.yaml 文件,内容如下:
name: 托尼·史塔克 # 字符串引号可以不加 【这里的缩进使用的是tab键,所以如果直接复制粘贴,在运行下方脚本时会报错,记得改成空格】 invention: - Iron Man Armor - Arc reactor - Ultron teammate: - Steven Rogers - Thor Odinson - Natasha Romanoff - Bruce Banner - Clint Barton apprentice: 彼得·帕克 wife: 佩珀·波兹 father: 霍华德·史塔克
创建一个 test_yaml.py 文件,读取 test.yaml 文件:
# coding:utf-8 import yaml def read(path): with open(path, "r") as file: data = file.read() result = yaml.load(data) # result = yaml.load(data, Loader=yaml.FullLoader) return result if __name__ == "__main__": result = read("test.yaml") print(result)
这里执行的时候出现了一个报错 :TypeError: load() missing 1 required positional argument: "Loader"。 如下图:
这是因为在 YAML 5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载器(FullLoader)禁止执行任意函数,该load函数也变得更加安全。所以我们需要将 result = yaml.load(data) 改为 result = yaml.load(data, Loader=yaml.FullLoader) 。
解决该 TypeError 不单单 只有 yaml.load(data, Loader=yaml.FullLoader) 这一个方法。
以下三选一即可解决该 TypeError
yaml.safe_load(file.read()) yaml.load(file.read(), Loader=yaml.FullLoader) yaml.load(file.read(), Loader=yaml.CLoader)
运行结果如下:
到此这篇关于Python学习之yaml文件的读取详解的文章就介绍到这了,更多相关Python yaml读取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?