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

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

时间:2023-04-02 23:55:33浏览次数:39  
标签:文件 读取 配置文件 Python yaml INI xiaoxu

当我们设计软件时,我们通常会花费大量精力来编写高质量的代码。但这往往还不够,一个好的软件还应该考虑其整个系统,如测试、部署、网络等。其中最重要的一个方面是配置管理。
良好的配置管理应允许在任何环境中执行软件而不更改代码。最常见的配置包括数据库认证配置、部署服务器的主机名、动态参数等。在本文中,我想与大家分享一些配置管理的良好实践,以及如何在Python中实现它们。

闲话少说,我们直接开始吧!

如何选择配置文件的格式

事实上,只要代码能够读取和解析配置文件的内容,那么配置文件的格式就没有任何限制。但是,业内有一些好的做法。最常见和标准化的格式是YAML、JSON和INI。

一个好的配置文件一般需要满足以下三个标准:

易于阅读和编辑:它应该以文本为基础,以易于理解的方式进行构建。即使是非开发人员也应该能够阅读。
允许注释:配置文件不是只有开发人员才能读取的文件。当非开发人员试图理解代码行为时,注释就显得很重要。编写注释是快速解释某些事情的一种方式,从而使配置文件更具表现力。
易于部署:所有操作系统和环境都应接受该配置文件。

如果你仍然不知道哪一个更好,但是在Python中,我推荐的答案将是YAMLINI。这是由于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,INI,xiaoxu
From: https://www.cnblogs.com/guowenrui/p/17281842.html

相关文章

  • Python面试题究极篇01
    目录Python面试题第一章深浅拷贝是什么魔法方法new和init有什么区别python的可变和不可变数据类型是什么什么是生成器,有什么应用场景数据库的三大范式是什么mysql有哪些索引类型,分别有什么作用事务的特性和隔离级别Python面试题第一章深浅拷贝是什么浅拷贝和深拷贝:浅拷贝是在......
  • python电子商务网站用户行为分析
    1importos2importpandasaspd345#修改工作路径到指定文件夹6os.chdir("C:\Users\86184\Desktop\文件集\data")78#第一种连接方式9#fromsqlalchemyimportcreate_engine1011#engine=create_engine('mysql+pymysql://root:[email protected].......
  • Python 数据结构与算法详解
    一、数据结构与算法1、算法提出1.算法概念算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机按照确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。算法是独立......
  • Python图形处理
    一、PillowPIL:PythonImagingLibrary,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。由于PIL仅支持到Python2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python3.x,又加入了许多新特性,因此,我们可以直接安......
  • Python邮件发送接收实战
    一、电子邮件Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务。几乎所有的编程语言都支持发送和接收电子邮件,但是,先等等,在我们开始编写代码之前,有必要搞清楚电子邮件是如何在互联网上运作的。我们来看看传统邮件是如何运作的。假设你现在在北京,要给一个香港......
  • Python3连接MySQL
    一、安装引入pymysql模块1、安装pipinstallPyMySQL2、Pycharm中引入pymysql3、在文件中引入模块importpymysql如果系统不支持pip命令,可以使用git命令下载安装包安装(也可以手动下载):$gitclonehttps://github.com/PyMySQL/PyMySQL$cdPyMySQL/$python3setup.pyinsta......
  • Python ORM Pony 常用操作(增删改查)
    Pony是一个高级的对象关系映射器ORM框架。Pony它能够使用Python生成器表达式和lambdas向数据库编写查询。Pony分析表达式的抽象语法树,并将其转换为SQL查询。支持SQLite,MySQL,PostgreSQL和Oracle等数据库,本文主要介绍PythonORMPony中常用操作,及数据增加、删除、修改和查询。......
  • python - 邮件发送
    因为公网ip是动态的,想做一个在ip发生改变后邮件提醒1.首先需要开启smtp服务开启后复制授权密码2.邮件发送importsmtplibfromemail.mime.textimportMIMETextFrom='[email protected]'#发件人邮箱To=Frompwd='ZZZZZZZZZZZZZZZZ'#授权码smtp=sm......
  • Python
    1.python3中格式化字符串的写法在3.6以前的版本中,可以这样用,也就是利用百分号print("我叫%s今年%d岁!"%('小明',10))2.在3.6之后的版本中,可以利用f-stringname="123123"print(f'hello{name}')注意要用大括号括起来,以及单引号的位置。2.python推导式可......
  • Day 20 20.3 数据库之Python操作MySQL
    Python操作MySQLimportpymysql#打开数据库连接db=pymysql.connect(host='localhost',user='root',passwd='...',port=3306,datebase='...')print('连接成功!')#使用cursor()方法创建一个游标对象cursorcursor=db.cursor()#......