当前位置: 首页 > article >正文

【新人系列】Python 入门(三):项目配置文件

✍ 个人博客:https://blog.csdn.net/Newin2020?type=blog
📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html
📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们一起交流~
📚 专栏简介:在这个专栏,我将带着大家从 0 开始入门 Python 的学习。在这个 Python 的新人系列专栏下,将会总结 Python 入门基础的一些知识点,方便大家快速入门学习~
❤️ 如果有收获的话,欢迎点赞 👍 收藏 📁 关注,您的支持就是我创作的最大动力 💪

1. ini 配置文件

ini 文件是初始化文件(Initialization File)的缩写,是一种简单的文本配置文件格式。

ini 文件通常用于存储程序的配置信息,例如软件的设置选项、参数、路径等。它的结构比较简单,由节(Section)和键值对(Key-Value Pair)组成。Section 用方括号括起来,例如:[SectionName] 。在 Section 下面是键值对,键和值之间用等号连接,例如:Key=Value 。

Python 项目就可以使用 ini 文件或者 config 文件做配置文件,并提供了 configparser.ConfigParser 来读取 ini,ini 配置文件以 .ini 结尾,config 文件以 .config 结尾,两者配置方式相同。

ini 在 Windows 系统中常常作为配置文件,其格式如下所示。

[mysql]
host=127.0.0.1
port=3306
username=root
password=123456

[redis]
host=127.0.0.1
port=6379

而在 Python 文件中,我们可以通过 configparser 包中的 ConfigParser 函数来调用 ini 文件。

  • cf.scctions():会获取 ini 配置文件中所有节名称
  • cf.options(‘xxx’):会获取 xxx 节下的所有配置项
  • cf.items(‘xxx’):会获取 xxx 节下的所有键值对
  • cf.get(‘xxx’, ‘yyy’):会获取 xxx 节下 yyy 配置项的对应的 value 值
from configparser import ConfigParser

cf = ConfigParser()
cf.read('config.ini')

print(cf.sections())            # ['mysql', 'redis']
print(cf.options('mysql'))      # ['host', 'port', 'username', 'password']
print(cf.items('mysql'))        # [('host', '127.0.0.1'), ('port', '3306'), ('username', 'root'), ('password', '123456')]
print(cf.get('mysql', 'host'))      # 127.0.0.1
print(cf.getint('mysql', 'port'))   # 3306

2. XML 配置文件

XML 是一种可扩展标记语言,可以标记电子文件使其具有结构性,常用于配置文件、数据存储和传输等领域,例如 Web 服务中的数据交换、文档标记等。

<?xml version="1.0" encoding="utf-8"?>
<dbconfig>
    <mysql>
        <host>127.0.0.1</host>
        <port>3306</port>
        <dbname>test</dbname>
        <username>root</username>
        <password>123456</password>
    </mysql>
    <redis>
        <host>127.0.0.1</host>
        <port>3306</port>
        <db>0</db>
        <password>44546</password>
    </redis>
</dbconfig>

XML 可以用来做 Python 的项目配置文件,可以使用标准模块 xml.etree.ElementTree 来解析 XML 文件。

import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse('config.xml')

# 获取根节点
root = tree.getroot()
print(root) # <bound method ElementTree.getroot of <xml.etree.ElementTree.ElementTree object at 0x1047e4ad0>>

for child in root:
    print(child.tag)    # mysql / redis

mysql_ip = root.find('mysql').find('host').text
print(mysql_ip) # 127.0.0.1

我们也可以通过递归来遍历 XML 文件中的所有节点。

import xml.etree.ElementTree as ET

# 遍历根节点下的所有子节点
def traverse_xml(element):
    # 遍历当前节点的子节点
    for child in element:
        # 打印子节点的标签和文本内容
        print(child.tag, child.text)
        # 递归遍历子节点的子节点
        traverse_xml(child)

traverse_xml(root)

在这里插入图片描述

3. JSON 配置文件

JSON(JavaScript Object Notation)文件是一种轻量级的数据交换格式。它以易于人类阅读和编写的文本形式来存储和交换数据,同时也易于机器解析和生成。

JSON 文件的结构非常简单,主要由键值对组成。键是字符串,值可以是字符串、数字、布尔值(true/false)、对象(又是一组键值对)、数组或者 null 。

JSON 文件常用于前后端的数据传输,因为它具有良好的跨平台性和语言无关性,大多数编程语言都能轻松地解析和生成 JSON 格式的数据。在实际应用中,比如配置文件、Web API 的响应数据等场景,JSON 文件都被广泛使用。

{
    "mysql": {
        "host": "127.0.0.1",
        "port": 3306,
        "db": "test",
        "username": "test",
        "password": "123456"
    },
    "redis":{
        "host": "127.0.0.1",
        "port": 3679,
        "db": 0,
        "password": "43435"
    }
}

在 Python 文件中解析 json 文件就十分的容易,直接导入 json 包即可。

import json

with open('config.json') as f:
    data = json.load(f)
    print(data) # {'mysql': {'host': '127.0.0.1', 'port': 3306, 'db': 'test', 'username': 'test', 'password': '123456'}, 'redis': {'host': '127.0.0.1', 'port': 3679, 'db': 0, 'password': '43435'}}
    print(data.get('mysql').get('host'))    # 127.0.0.1

4. YAML 配置文件

YAML 是专门用来写配置文件的标记语言,比 ini 更加直观更方便。并且支持多种数据类型,比如字符串、整数、浮点数、布尔值、数组和字典等。

YAML 的语法比较简洁直观,不需要像其他一些格式那样使用特定的括号或符号:

  • 使用空格缩进表示层级结构
  • 用冒号来分隔键值对,key 和 value 之间要用空格分开
  • 使用短横线来表示一个列表
  • 使用 # 表示注释

YAML 文件常用于配置文件,特别是在一些需要复杂配置的应用中,比如部署配置、持续集成/持续部署(CI/CD)管道配置等。它的易读性和简洁性使得配置信息更容易理解和维护。

# 单个键值对,常用来定义字符串变量
name: mikezhoue
age: 18

# 定义一个列表
username_list:
    - 张三
    - 李四
    - 王五

# 定义一个字典
username_dict:
    name: 张三
    age: 18

来看个实际的应用例子。

mysql:
    host: 127.0.1.1   # ip
    user: test        # 用户名
    port: 3306        # 端口
    db: test
    password: 123456
  
redis:
    host: 127.0.0.1
    port: 3679
    db: 0
    pwd: 123456
  
db_ip:
    - 192.168.0.1
    - 192.168.0.2
    - 192.168.0.2

YAML 可以用于作为 Python 的项目配置文件,使用第三方模块 YAML 可以读取 YAML 文件。

pip install PyYaml

在 Python 文件中,使用起来也比较方便,直接导入 yaml 包,然后调用其方法即可。

import yaml
with open('config.yaml') as f:
    data = f.read()
    yaml_reader = yaml.load(data, Loader=yaml.FullLoader)
    print(yaml_reader['mysql'])             # 以字典的形式输出mysql下的所有配置
    print(yaml_reader['redis']['port'])     # 输出某一项
    print(yaml_reader['db_ip'])             # db_ip配置是一个数组

在这里插入图片描述

5. Python 配置文件

我们也可以将配置信息放到 Python 文件中 ,以 Python 脚本作为配置文件。虽然这种方式很方便快捷,但并不推荐,因为这等于将配置信息以明文的方式展现到 Python 文件中,如果作为一个项目公布出去,可能会泄露。不过如果只是个人项目开发,则可以使用这种方式提升效率。

例如,下面我在一个 Python 文件中定义字典。

# parse.py

# 1.使用字典
mysql_config = {
    'host': '127.0.0.1',
    'port': 3306,
    'username': 'mikezhou',
    'password': 123456
}

# 2.使用类 - 更推荐
class MySqlConfig(object):
    host = '127.0.0.1'
    port = 3306
    username = 'mikezhou'
    password = 123456

然后在另一个 Python 文件导入上面这个文件里的信息,并进行使用。

from parse import mysql_config, MysqlConfig

print(mysql_config.get('host'))    # 127.0.0.1
print(MysqlConfig.host)    # 127.0.0.1

6. 动态配置

前面的五种方法都存在一些问题,例如面对不同环境时,配置文件的信息都是固定的;并且若项目开源了,这些信息如果不小心提交上去,则可能造成安全问题。这时候就可以通过环境变量来解决这些问题,可以看如下例子。

Tips:
下面这些环境变量 export 操作方式都是默认在 mac 或 Linux 系统下,如果在 Windows 系统下则需要通过 “控制面板” - “系统和安全” - “系统” - “高级系统设置” - “环境变量” 来设置。

  • 通过环境变量来区分不同的环境信息
# 设置环境变量
export env = prod

# Python文件
import os
env = os.eviron.get('env','prod')
if env == 'qa':
    print("读取测试环境")
elif env == 'dev':
    print("读取开发环境")
elif env == 'prod':
    print("读取生产环境")
  • 可以直接将敏感类的配置信息放进环境变量里
# 添加环境变量
export API_KEY = jladsf jlkajd fsasd    # 可以事先对敏感信息进行加密处理

# Python文件
import os
API_KEY = os.eviron.get('env', 'API_KEY')
  • 若配置信息很多,一个个操作放进环境变量中很麻烦,则可以使用 python-dotenv 第三方库,支持将敏感或者配置信息写到 .env 文件后进行查找操作
  1. 下载 python-dotenv 库
pip install python-dotenv
  1. 创建 .env 文件
API_KEY = jladsf jlkajd fsasd
PASSWORD = 123456
DEBUG = True
  1. 代码示例
import os
from dotenv import load_dotenv

load_dotenv()    # 默认到.env文件查找
# load_dotenv(find_dotenv('.env.qa')) # 也可以指定查找的文件
API_KEY = os.eviron.get('env', 'API_KEY')
PASSWORD = os.eviron.get('env', 'PASSWORD')
DEBUG = os.eviron.get('env', 'DEBUG')

Tips:
如果创建了 .env 文件,则为了避免误操作上传到代码仓库造成信息泄露,需要将 .env 文件加到 .gitignore 中忽略该文件。


http://www.kler.cn/news/359794.html

相关文章:

  • 【python】OpenCV—Sort the Point Set from Top Left to Bottom Right
  • k8s 部署步骤整理(containerd)
  • 大数据-182 Elasticsearch - 原理剖析 数据结构-倒排索引、SkipList 跳表
  • 足浴店+闸机+智能衣柜+门票系统一体化管理系统解决方案——未来之窗行业应用跨平台架构
  • C#从零开始学习(GameObject实例)(unity Lab3)
  • 买横买坑不买竖, 卖点就在鼎沸处 (2700点下买入,3300点卖出)宽幅振荡
  • 【MySQL】清理二进制日志文件 binlog.000XXX 以解决 Ubuntu 系统磁盘空间耗尽的问题
  • K8S调度不平衡问题分析过程和解决方案
  • Python网络请求库requests的10个基本用法
  • 微信小程序canvas 生成二维码图片,画图片,生成图片,将两个canvas结合并保存图片
  • 探索 Jupyter 笔记本转换的无限可能:nbconvert 库的神秘面纱
  • 网络空间安全之一个WH的超前沿全栈技术深入学习之路(一:渗透测试行业术语扫盲)作者——LJS
  • Linux系统安装软件的4种方式【源码配置编译安装、yum安装、rpm包安装、二进制软件包安装(.rpm/.tar.gz/.tgz/.bz2)】
  • 数据驱动的未来:AI智能分析网关V4车辆违停算法与智慧城市交通管理
  • .net framework 3.5sp1安装错误卡住不动怎么解决
  • 机器学习作业:HW2分类(Phoneme Classification音素分类)代码详解
  • 引领企业数字化未来:物联网与微服务架构的深度融合之道
  • 用户界面设计:视觉美学与交互逻辑的融合
  • (46)MATLAB仿真从正弦波转换为方波
  • 【重拾算法第一天】质数约数欧拉筛 埃氏筛GCD