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

标签:Python,ini,yaml,文件读取
0
投稿

猜你喜欢

  • Python+腾讯云服务器实现每日自动健康打卡

    2023-08-18 00:22:44
  • Python实现计算最小编辑距离

    2021-07-16 19:26:18
  • Python3实现从文件中读取指定行的方法

    2021-01-06 04:18:17
  • matplotlib绘制符合论文要求的图片实例(必看篇)

    2023-08-12 08:08:39
  • asp如何让页面背景五彩缤纷?

    2010-05-13 16:38:00
  • Python机器学习性能度量利用鸢尾花数据绘制P-R曲线

    2023-01-27 20:55:48
  • Golang正整数指定规则排序算法问题分析

    2023-07-12 09:12:03
  • Python使用回溯法子集树模板解决迷宫问题示例

    2021-07-09 14:42:43
  • Python无法用requests获取网页源码的解决方法

    2023-04-24 07:38:04
  • 使用Dreamweaver便捷技巧方法十六则

    2010-07-02 16:28:00
  • AspJpeg 2.0组件使用教程(GIF篇)

    2008-12-16 19:37:00
  • WEB2.0网页制作标准教程(3)定义语言编码

    2007-11-13 13:23:00
  • Sql Server、Oracle以及Access数据库 判断字段是否为空的办法 (From calmzeal's code life)

    2011-02-24 19:44:00
  • Python实现二叉树的最小深度的两种方法

    2022-05-24 03:30:17
  • 在python中按照特定顺序访问字典的方法详解

    2023-02-09 07:14:34
  • Collatz 序列、逗号代码、字符图网格实例

    2023-07-27 10:24:31
  • 基于Python的文件类型和字符串详解

    2023-08-03 12:51:26
  • asp实现的查询某关键词在MSSQL数据库位置的代码

    2011-02-28 11:18:00
  • Python 中获取数组的子数组示例详解

    2022-11-04 19:26:26
  • echo(),print(),print_r()之间的区别?

    2023-11-15 08:52:42
  • asp之家 网络编程 m.aspxhome.com