首页 > 编程语言 >Python配置文件管理之ini和yaml文件读取

Python配置文件管理之ini和yaml文件读取

时间:2023-02-18 14:31:44浏览次数:43  
标签:文件 读取 配置文件 示例 Python yaml INI

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两种文件格式,并给出了相应的代码示例。

您学废了嘛?

标签:文件,读取,配置文件,示例,Python,yaml,INI
From: https://blog.51cto.com/u_15506603/6065422

相关文章

  • python定时器
    一.TimerTimer为threading中的一个类,用来指定的秒数后调用函数,我们来看下Timer类的构造参数。interval:设置定时运行的时间function:设置定时的事件args:参数kwargs:字典......
  • 【编程基础之Python】5、安装Python第三方模块
    (【编程基础之Python】5、安装Python第三方模块)安装Python第三方模块为什么需要安装第三方模块Python具有很强的可扩展性,它不是把所有功能特性都集中到语言核心,而是提供......
  • 大文件读取的实现-PYTHON
    当前一个大文件大小,比当前的机器的内存大,先读取某个文件里的一部分。文件遍历因为文件保存了很多字符和行,因此也是循环常见的典型使用案例,最原始的方法可以调用文件对象的re......
  • python--石头剪刀布游戏(列表)
    一、学习目标利用列表实现石头剪刀布游戏二、实验环境Pycharm社区版、win11三、代码及运行结果先贴代码,有需要的直接拿,想要进一步一起学习的,接着往下看第四个标题呀,亲。起初......
  • python学习笔记七:DataFrame
    1.Series是ndarray的升级,而DataFrame是Series的升级,从一维拓展到多维DataFrame的属性:index,colums,values,shapeimportnumpyasnpimportpandasaspdfrompandasimport......
  • python学习笔记六:Series
    Series是一种类似于一维数组的对象,由以下两部分组成:values:一组数据(ndarray或list类型)index:相关的数据索引标签一维数组默认索引为0,1,2,3...,而Series的索引可以自己给定......
  • python学习笔记五:numpy
    ndarray是一个多维数组的数据结构1.彩色图像是一个三维数组,通过matplotlib显示图像#显示图像importnumpyasnpimportmatplotlib.pyplotaspltfish=plt.imread('HappyF......
  • python学习笔记四:字典
    字典和集合一样是无序的,不能通过索引来存取,只能通过键来存取。字典的键必须是不可变的数据类型,如数字,字符串,元组等,列表等可变对象不能作为键。不允许同一个键出现两次,创建......
  • python学习笔记三:元组和集合
    学习python的小伙伴们经常会有这样一个疑问,既然有列表里,问什么还要有元组呢。因为列表是可变的,而元组是不可变的。比如我们经常需要传入函数的数据是不变的,这时就要用到元组......
  • python学习笔记二:列表
    列表通过索引读取数据:#索引读取数据a=[1,2,3]a[-1]运行结果:3列表支持嵌套:b=[[1,2,3],[4,5,6]]print(b)运行结果:[[1,2,3],[4,5,6]]列表可以修改:b=[[1,2,3],[4,5,6......