Python配置文件管理之ini和yaml文件读取
Posted 郭小睿的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python配置文件管理之ini和yaml文件读取相关的知识,希望对你有一定的参考价值。
当我们设计软件时,我们通常会花费大量精力来编写高质量的代码。但这往往还不够,一个好的软件还应该考虑其整个系统,如测试、部署、网络等。其中最重要的一个方面是配置管理。
良好的配置管理应允许在任何环境中执行软件而不更改代码。最常见的配置包括数据库认证配置、部署服务器的主机名、动态参数等。在本文中,我想与大家分享一些配置管理的良好实践,以及如何在Python中实现它们。
闲话少说,我们直接开始吧!
如何选择配置文件的格式
事实上,只要代码能够读取和解析配置文件的内容,那么配置文件的格式就没有任何限制。但是,业内有一些好的做法。最常见和标准化的格式是YAML、JSON和INI。
一个好的配置文件一般需要满足以下三个标准:
易于阅读和编辑:它应该以文本为基础,以易于理解的方式进行构建。即使是非开发人员也应该能够阅读。
允许注释:配置文件不是只有开发人员才能读取的文件。当非开发人员试图理解代码行为时,注释就显得很重要。编写注释是快速解释某些事情的一种方式,从而使配置文件更具表现力。
易于部署:所有操作系统和环境都应接受该配置文件。
如果你仍然不知道哪一个更好,但是在Python中,我推荐的答案将是YAML
或INI
。这是由于YAML和INI被大多数Python程序和包所接受。
INI文件示例
INI文件通常是最简单的解决方案,由于它只有一个层次结构。然而,INI
文件中没有数据类型,所有内容都被编码为字符串。
示例如下:
[APP]
ENVIRONMENT = test
DEBUG = True
# Only accept True or False
[DATABASE]
USERNAME = xiaoxu
PASSWORD = xiaoxu
HOST = 127.0.0.1
PORT = 5432
DB = xiaoxu_database
YAML文件示例
使用YAML针对上述示例的相同配置如下所示。如下所示,YAML
文件支持嵌套结构。此外,YAML也支持一些常见的数据类型,如字符串、整数、双精度、布尔值、列表、字典等。
APP:
ENVIRONMENT: test
DEBUG: True
# Only accept True or False
DATABASE:
USERNAME: xiaoxu
PASSWORD: xiaoxu
HOST: 127.0.0.1
PORT: 5432
DB: xiaoxu_database
使用Cofigureparser读取ini文件
首先,我们来介绍Python专门为配置管理而设计的包,我们从内置的配置包Configureparser
开始。
Configureparser主要用于读取和写入INI文件,但它也同样支持字典和可迭代文件对象作为输入。每个INI文件由多个部分组成,其中有多个键、值对。
下面是上述ini文件读取的示例:
import configparser
def read_ini(file_path, config_json):
config = configparser.ConfigParser()
config.read(file_path)
for section in config.sections():
for key in config[section]:
print((key, config[section][key]))
read_ini("source/data/sample.ini", config_json)
# (\'environment\', \'test\')
# (\'debug\', \'True\')
# (\'username\', \'xiaoxu\')
# (\'password\', \'xiaoxu\')
# (\'host\', \'127.0.0.1\')
# (\'port\', \'5432\')
# (\'db\', \'xiaoxu_database\')
Configureparser并不会猜测配置文件中的数据类型,因此每个配置项都被存储为字符串。但它提供了一些将字符串转换为正确数据类型的方法。这里面最有趣的是布尔类型,因为它能够识别诸如yes/no、on/off、true/false和1/0的布尔值。
yaml文件读取示例
Python有专门的内置包来解析yaml文件。由于安全性问题,建议使用yaml.safe_load()而不是yaml.load()来进行yaml文件的读取。
示例代码如下:
import yaml
def read_yaml(file_path):
with open(file_path, "r") as f:
return yaml.safe_load(f)
data = read_yaml("data/sample.yaml")
print(data)
python之yaml文件读取
yaml ,它是另一种标记语言。yaml 是专门用来写配置文件的语言,非常简洁和强大。用ini也能写配置文件,看了yaml后,发现这个更直观,更方便,有点类似于json格式。下面我们将为大家介绍这个强大的yaml文件。
1、yaml简介
1)基本语法规则:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#
表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
2)YAML 支持的数据结构有三种:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期
我们来写一个简单的yaml文件做示范:
2、yaml文件的书写
1)字典
yaml里面的键值对,也就是python里面的字典(dict)数据类型,比如python里面的字典,用yaml如何去写,示范代码如下:
在yaml文件中可以这样去写:
2)字典嵌套字典
在yaml文件中可以这样去写:
3)字典嵌套列表
在yaml文件中可以这样去写:
4)纯量(str)
(1)int和float类型的数字
在yaml文件中可以这样去写:
(2)布尔值用true和false表示
在yaml文件中可以这样去写:
(3)None用~表示
在yaml文件中可以这样去写:
(4)时间采用 ISO8601 格式
在yaml文件中可以这样去写:
(5)日期采用复合 iso8601 格式的年、月、日表示。
在yaml文件中可以这样去写:
3、读取yaml文件
用python读取yaml时,先用open方法读取文件数据,再通过load方法转成字典,这个load跟json里面的load是相似的,示范代码如下:
yaml文件如下:
读取的示范代码如下:
读取的结果如下:
4、向yaml中写入内容
示范代码如下:
执行代码后,yaml文件中写入的内容如下所示:
以上是关于Python配置文件管理之ini和yaml文件读取的主要内容,如果未能解决你的问题,请参考以下文章