摘要这一篇介绍 Python 中使用 yaml 的方式加载配置文件,包含关于 pyyaml 的简单使用,读入和写入配置文件。

简介

之前我们介绍过使用 configparser 来读取配置文件(Python读入配置文件-configparser介绍),这里我们介绍另外一种 Python 写配置文件的方式,使用 yaml 来写配置文件。我们会使用 pyyaml 库来完成。

Yaml 配置文件介绍

为了可以读取 yaml 文件,我们需要安装 pyyaml 并导入 yaml 模块。使用 pip install pyyaml 来进行安装即可。

yaml 文件规则

首先来说明一下 yaml 配置文件书写的时候的规则:

配置文件区分大小写;

使用缩进表示层级关系;

使用空格键缩进,缩进的空格数目不固定,只需要相同层级的元素左侧对齐;

文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;

注释标识为 #

键值对用冒号 ':' 结构表示,冒号与值之间需用空格分隔

可以在配置前加有 "-" 符号,符号与值之间需用空格分隔,来表示数组。(也可以直接写成 list 的形式即可)

yaml 配置文件支持的数据类型如下所示:

# 纯量

s_val: name              # 字符串:{'s_val': 'name'}

spec_s_val: "name\n"    # 特殊字符串:{'spec_s_val': 'name\n'

num_val: 31.14          # 数字:{'num_val': 31.14}

bol_val: true           # 布尔值:{'bol_val': True}

nul_val: null           # null值:{'nul_val': None}

nul_val1: ~             # null值:{'nul_val1': None}

time_val: 2018-03-01t11:33:22.55-06:00     # 时间值(iso8601格式):{'time_val': datetime.datetime(2018, 3, 1, 17, 33, 22, 550000)}

date_val: 2019-01-10    # 日期值:{'date_val': datetime.date(2019, 1, 10)}

下面是一个基本的 yaml 配置文件的示例,包含了一些基本的元素:

train:

batch_size: 25

lr: 0.001

train_index: [1,2,3]

test:

batch_size: '100'

test_index:

- 1

- 2

- 3

读取 yaml 配置文件

我们使用 yaml.safe_load 来读取上面的配置文件。读取的结果会保存为 python 中的 dict 类型。

import os

import yaml

with open(os.path.join('test.yaml')) as f:

cfg = yaml.safe_load(f) # 读取配置文件

print(cfg)

最终输出的值如下所示:

这一部分可以和 easydict 配合使用,关于 easydict 的内容可以查看链接,Python 中 EasyDict 的使用。

import os

import yaml

from easydict import EasyDict

def setup_config():

with open(os.path.join('test_config.yaml')) as f:

cfg = yaml.safe_load(f) # 读取配置文件

cfg = EasyDict(cfg) # 存成 Easydict 的格式

return cfg

生成 yaml 配置文件的格式

我们可以使用 yaml.dump 来将字典或是列表转换为 yaml 的标准格式。还是上面的例子,这里我们使用 yaml.dump 来看一下最终生成的结果。

import os

import yaml

with open(os.path.join('test.yaml')) as f:

cfg = yaml.safe_load(f) # 读取配置文件

print(cfg)

print('='*10)

print(yaml.dump(cfg))

可以看到使用 yaml.dump 可以生成 yaml 所需要的格式。

我们也可以将输出的内容直接保存到文件中。(yaml.dump accepts the second optional argument, which must be an open text or binary file. In this case, yaml.dump will write the produced YAML document into the file. Otherwise, yaml.dump returns the produced document.)

import os

import yaml

with open(os.path.join('test.yaml')) as f:

cfg = yaml.safe_load(f) # 读取配置文件

stream = open('document.yaml', 'w', encoding='utf8')

yaml.dump(cfg, stream)

这样可以直接将 yaml 保存到文件 document.yaml 中去。

python 读取yml文件_Python 读取 yaml 配置文件 | 文艺数学君相关推荐

  1. python 读取yml文件_python读取yaml配置文件

    什么是yaml 1.yaml [ˈjæməl]: Yet Another Markup Language :另一种标记语言.yaml 是专门用来写配置文件的语言,非常简洁和强大, 2.支持多种语言:p ...

  2. python生成字符画_Python生成字符画 | 文艺数学君

    摘要这一篇文章介绍使用Python生成字符画的方式. 会给出简单的原理介绍和实现的方式. 最后会给出源代码的链接地址. 简介 这一篇介绍一下使用Python来进行字符画的生成. 这里会介绍一下生成的步 ...

  3. python 读取大文件_Python读取大文件

    1. 前言 前几天在做日志分析系统,需要处理几十G的文件,我尝试用原来的for line in open(filepath).readlines()处理,但停顿好久也没变化,可见占用不小的内存.在网上 ...

  4. python读取手机文件_python 读取 网络 文件

    Python之pandas数据加载.存储 Python之pandas数据加载.存储 0. 输入与输出大致可分为三类: 0.1 读取文本文件和其他更好效的磁盘存储格式 2.2 使用数据库中的数据 0.3 ...

  5. python生成表格文件_python 读取excel文件生成sql文件实例详解

    python 读取excel文件生成sql文件实例详解 学了python这么久,总算是在工作中用到一次.这次是为了从excel文件中读取数据然后写入到数据库中.这个逻辑用java来写的话就太重了,所以 ...

  6. python生成表格文件_python读取和生成excel文件

    1.用python读取csv文件: csv是逗号分隔符格式 一般我们用的execl生成的格式是xls和xlsx 直接重命名为csv的话会报错: Error: line contains NULL by ...

  7. python保存mat文件_python读取文件——python读取和保存mat文件

    首先我们谈谈MarkDown编辑器,我感觉些倒是挺方便的,因为用惯了LaTeX,对于MarkDown还是比较容易上手的,但是我发现,MarkDown中有这样几个问题一直没能找到具体的解决方法:图片大小 ...

  8. python读取写入文件_Python读取文件,写入文件,打开文件,删除文件,复制文件

    python读取写入文件 In this tutorial we are going to learn about Python File Operations such as python read ...

  9. python导入mat文件_python读取并写入mat文件的方法

    先给大家介绍下python读取并写入mat文件的方法 用matlab生成一个示例mat文件: clear;clc matrix1 = magic(5); matrix2 = magic(6); sav ...

最新文章

  1. 假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?...
  2. eeglab教程系列(4)-绘制通道光谱图
  3. (三)数字判断大小语句
  4. 图卷积网络是什么?(行为识别)
  5. 寄存器分配图着色_寄存器分配
  6. [紧急问题和解决方案] 无法打开被权限管理服务(RMS)加密的Office 2003文档
  7. C++ vector的反向迭代器
  8. 设置devenv命令的启动版本
  9. HbuilderX、Hbuilder编辑器如何使用手机调试app
  10. 第十天 Oracle安装前准备工作
  11. python井字棋如何判断输赢_python 井字棋游戏 简单版,不知道为什么不判断,用Tkinter做的界面...
  12. VScode C语言环境搭建教程
  13. 计算机网络技术基础知识
  14. SQL Server 函数汉字转首字母或全拼
  15. java 解析GZIP 和 Deflate 网页源文件
  16. 2021-2027全球与中国网眼织物纺织品市场现状及未来发展趋势
  17. 【Android】图像滤镜框架GPUImage从配置到应用
  18. 曲速未来 发布:新基建下,区块链将急速发展
  19. 大数据的几个特点(4V)
  20. Python爬虫练习:JS解密,爬取某音漫客网站数据

热门文章

  1. Collection和Collections之间的使用与区别
  2. python field readonly_Python serializers.ReadOnlyField方法代码示例
  3. android studio异步单元测试,在Android Studio中可以进行单元测试
  4. python array_python数组array.array(转帖)
  5. Cortex - M3 位带别名首地址的计算方法
  6. int、unsigned int、float、double 和 char 在内存中存储方式
  7. 启明云端分享|ESP32-S3 的 USB 支持 USB Host 吗?
  8. java进程内存一直没释放_面试官:一个线程OOM,进程里其他线程还能运行么?...
  9. Zynq调试和测试子系统
  10. 「比人还会聊天」百度PLATO对话机器人开放体验