Python配置文件管理之ini和yaml文件读取的实现
作者:赵卓不凡 发布时间:2022-01-10 15:33:08
1. 引言
当我们设计软件时,我们通常会花费大量精力来编写高质量的代码。但这往往还不够,一个好的软件还应该考虑其整个系统,如测试、部署、网络等。其中最重要的一个方面是配置管理。
良好的配置管理应允许在任何环境中执行软件而不更改代码。最常见的配置包括数据库认证配置、部署服务器的主机名、动态参数等。在本文中,我想与大家分享一些配置管理的良好实践,以及如何在Python中实现它们。
闲话少说,我们直接开始吧!
2. 如何选择配置文件的格式
事实上,只要代码能够读取和解析配置文件的内容,那么配置文件的格式就没有任何限制。但是,业内有一些好的做法。最常见和标准化的格式是YAML、JSON、TOML和INI。
一个好的配置文件一般需要满足以下三个标准:
易于阅读和编辑:它应该以文本为基础,以易于理解的方式进行构建。即使是非开发人员也应该能够阅读。
允许注释:配置文件不是只有开发人员才能读取的文件。当非开发人员试图理解代码行为时,注释就显得很重要。编写注释是快速解释某些事情的一种方式,从而使配置文件更具表现力。
易于部署:所有操作系统和环境都应接受该配置文件。
如果你仍然不知道哪一个更好,但是在Python中,我推荐的答案将是YAML或INI。这是由于YAML和INI被大多数Python程序和包所接受。
3. 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
4. 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
5. 使用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的布尔值。
6. 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)
7. 总结
本文重点介绍了Python中配置文件的读取,主要包括常见的ini和yaml两种文件格式,并给出了相应的代码示例。
来源:https://blog.csdn.net/sgzqc/article/details/129099354
猜你喜欢
- 1. os.listdir()概述os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。例如:dir ='
- Numpy通过观察Python的自有数据类型,我们可以发现Python原生并不提供多维数组的操作,那么为了处理矩阵,就需要使用第三方提供的相
- ORA-00600:internal error code,arguments:[num],[?],[?],[?],[?]产生原因:这种错误
- 要求:分别以james,julie,mikey,sarah四个学生的名字建立文本文件,分别存储各自的成绩,时间格式都精确为分秒,时间越短成绩
- 写给自己1. 首先,确定你的问题是:Jupyter-notebook可以正常运行,但是不弹出默认浏览器,例如下图(只有下图,浏览器死活没动静
- 导语说到童年爱玩的电脑游戏,你会想到什么?最国民的莫过于金山打字通,接着是扫雷、红心大战,而红极一时的单机游戏当属《大富翁》。嘻嘻 打字游戏
- 本文实例讲述了PHP登录验证功能。分享给大家供大家参考,具体如下:登录界面具体实现方法如下:login.html<!DOCTYPE h
- 跟小组里一自称小方方的卖萌90小青年聊天,IT男的坏习惯,聊着聊着就扯到技术上去了,小方方突然问 1、声明一个数值类型的变量我看到三种,区别
- 本文实例讲述了创建Django项目的方法。分享给大家供大家参考,具体如下:创建Django项目创建一个HelloDjango项目GitHub
- opencv > pilimport cv2 from PIL import Imageimg = cv2.imread("
- 首先创建如下的数组和矩阵,其中a,b为数组,A,B为矩阵import numpy as npa = np.arange(1,5).resha
- Python序列化的概念很简单。内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人。你会怎么做?这取决于你想要怎么保存,怎么
- 起步这是一个相当实用的内置模块,但是很多人竟然不知道他的存在——笔者也是今天偶然看到的,哎……尽管如此,还是改变不了这个模块好用的事实hea
- 在上一篇文章中,我们通过AST完成了微信小程序组件的多端编译,在这篇文章中,让我们更深入一点,通过AST完成一个javascript元循环求
- 用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”\u***”的格式,如果想汉字不进行转码,这里提
- 本文实例为大家分享了JS+DIV实现拖动效果的具体代码,供大家参考,具体内容如下效果图思路代码<!DOCTYPE html>&l
- 目录简介js 中的迭代器是什么样子的迭代协议可迭代协议迭代器协议迭代过程迭代总结自定义迭代传统写法生成器函数写法简介迭代器是一种设计模式,可
- 前言哈喽,大家好,我是asong;前几天逛github发现了一个有趣的并发库-conc,其目标是:更难出现goroutine泄漏处理pani
- 1.需求描述编写一个 Python 程序,每次下载压缩包形式的文件后,自动将内部文件解压到当前文件夹后将压缩包删除,通过本案例可以学到的知识
- chatGPT已经爆火一段时间了,我想大多数的开发者都在默默的在开发和测试当中,可能也是因为这个原因所以现在很难找到关于开发中遇到的一些坑或