Python 配置文件config.ini用法详解

1、介绍config.ini文件

config.ini是一种配置文件,常用于存储程序或系统的配置信息。它通常采用键值对的形式,每一行表示一个配置项,用等号(=)将键和值分隔开。config.ini文件可以包含多个节(section),每个节可以包含多个配置项

2、创建config.ini文件 

有两种方法:

        1、手动创建config.ini文件

        2、在调用写入信息到config.ini文件时会自动创建

[database]
host = localhost
port = 5432
username = myusername
password = mypassword

[api]
key = myapikey
url = https://api.example.com

ini结构:
        `片段(section)对应 [database]`
        `选项(option)对应 key1,相当于host`
        `值(value)对应value1,相当于locahost`

3、写入 config.ini文件

import configparser


def create_config():
    config = configparser.ConfigParser()

    # 设置database部分
    config['database'] = {
        'host': 'localhost',
        'port': '5432',
        'username': 'myusername',
        'password': 'mypassword'
    }

    # 设置api部分
    config['api'] = {
        'key': 'myapikey',
        'url': 'https://api.example.com'
    }

    # 写入到文件
    with open('config.ini', 'w') as configfile:
        config.write(configfile)


create_config()

这段代码创建了一个名为 config.ini 的文件,并填充了它与我们在之前的INI文件示例中看到的相同的值。  

4、读取config.ini文件

 简单版:

import configparser


def read_config():
    config = configparser.ConfigParser()
    config.read('config.ini')

    # 读取数据库配置
    db_host = config.get('database', 'host')
    db_port = config.get('database', 'port')
    db_username = config.get('database', 'username')
    db_password = config.get('database', 'password')

    # 读取API配置
    api_key = config.get('api', 'key')
    api_url = config.get('api', 'url')

    return db_host, db_port, db_username, db_password, api_key, api_url


db_host, db_port, db_username, db_password, api_key, api_url = read_config()

print("Database 数据:")
print(f"Host: {db_host}")
print(f"Port: {db_port}")
print(f"Username: {db_username}")
print(f"Password: {db_password}")

print("\nAPI 数据:")
print(f"Key: {api_key}")
print(f"URL: {api_url}")
Database 数据:
Host: localhost
Port: 5432
Username: myusername
Password: mypassword

API 数据:
Key: myapikey
URL: https://api.example.com

Process finished with xit code 0

优化版:

import configparser
import os


# 读取配置文件
def read_config():
    # 获取当前文件所在目录 
    root_dir = os.path.dirname(os.path.dirname(__file__))
    # 组装config.ini路径,也可以直接写配置文件的具体路径,不用自动获取
    config_dir = os.path.join(root_dir, 'config', 'config.ini')


    # 创建configparser对象
    cf = configparser.ConfigParser()
    # 读取config.ini
    cf.read(config_dir, encoding="utf-8")
    return cf


cf = read_config()
api_url = cf.get('api', 'url')
# 注意端口要用getint方法获取
database_port = cf.getint('database', 'port')
print(api_url)
print(database_port)
https://api.example.com
5432

Process finished with exit code 0

5、总结:

读取配置文件的常用方法:

	# 创建configparser对象
    cf = configparser.ConfigParser()

    # 读取配置文件 常用的方法介绍
	cf.read(filename)    # 读取文件,返回filename的list

    cf.sections()    # 获取配置文件中所有sections的list

    cf.options(section)    # 获取指定section的键值list

    cf.items(section)    # 获取指定section下所有的键值对list

    cf.get(section, key)    # 获取指定section下指定key的value值, 返回str

    cf.getint(section, key)    # 获取指定sections下指定key的value值, 返回int

    cf.getfloat(section, key)    # 获取指定sections下指定key的value值, 返回float

    cf.getboolean(section, key)    # 获取指定sections下指定key的value值, 返回boolean

    cf.has_section(section)    # 获取是否包含某个section,返回boolean

    cf.has_option(section,key)    # 获取是否包含某个section的某个键,返回boolean

写入配置文件的常用方法:

# 写入配置文件 常用方法介绍
cf = configparser.ConfigParser()    # 实例化对象

cf.read(self.filename)    # 读取文件,如果是重新写入,覆盖原有内容不需要读取 

cf.add_section(section)    # 添加sections值

cf.set(section, option, value)    # 在指定的sections中添加键值对

cf.remove_section(section)    # 移除sections, 需要先cf.read(filename)

cf.remove_option(section, option)    # 移除指定sections下的options, 需要先cf.read(filename)

样例介绍:

# 样例介绍
class WriteConfig():
    """写入config文件"""
    def __init__(self, filename, filepath=r"D:\python_file\boke\config"):
        self.filename = filename
        os.chdir(filepath)
        self.cf = configparser.ConfigParser()
        self.cf.read(self.filename)    # 如果修改,则必须读原文件

    def _with_file(self):
        # write to file
        with open(self.filename, "w+") as f:
            self.cf.write(f)

    def add_section(self, section):
        # 写入section值
        self.cf.add_section(section)
        self._with_file()

    def set_options(self,section, option, value=None):
        """写入option值"""
        self.cf.set(section, option, value)
        self._with_file()

    def remove_section(self, section):
        """移除section值"""
        self.cf.remove_section(section)
        self._with_file()

    def remove_option(self, section, option):
        """移除option值"""
        self.cf.remove_option(section, option)
        self._with_file()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/550890.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创建k8s deploy yaml文件的imagePullSecrets语句

镜像仓库是harbor kubectl create secret docker-registry key --docker-server192.168.0.190 --docker-usernameadmin --docker-passwordHarbor12345

Fluke ADPT连接器(隔离版)----发布1

代替手工记录、记录后在整理的麻烦,轻点鼠标(单次采集、自动时间间隔采集自由选择)即可完成,测试数据导出图片、导出数据到EXCEL文件随意选择; 所需设备: 1、Fluke ADPT连接器;内附链接 主要…

docker网路和主机通讯问题

#注 1,安装docker和启动容器服务的时候如果防火墙处于开启状态,那么重启docker里面的容器的时候必须开启防火墙,否则会出现iptable错误; 2,linux开启防火墙会导致主机和docker网络之间单向通讯,主机可以访…

Ubuntu 部署ChatGLM3大语言模型

Ubuntu 部署ChatGLM3大语言模型 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。 源码:https://github.com/THUDM/ChatGLM3 部署步骤 1.服务器配置 Ubuntu 20.04 8核(vCPU) 32GiB 5Mbps GPU NVIDIA T4 16GB 硬盘 100GiB CUDA 版本 12.2.2/…

专业143总分428学硕第一东南大学920专业基础综合考研经验电子信息与通信工程,海洋工程,电路系统,鲁汶,真题,大纲,参考书。

24考研基本已经尘埃落定,总归要为回忆留下点什么。回想起这一年的备考之路,至今仍觉得时间过得很快,有些感到恍惚,似乎不能接受。但是仔细思考一下,这一年经历了很多,走过很多弯路也取得一些阶段性的小成功…

Hive-Sql复杂面试题

参考链接:hive sql面试题及答案 - 知乎 有哪些好的题目都可以给我哦 我来汇总到一起 1、编写sql实现每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数 数据: userid,month,visits A,2015-01,5 A,2015-01,15 B,2015-01,5 A,2015-01,…

独角数卡发卡系统源码hyper模版首页产品列表添加库存数量显示的方法

默认的独角数卡hyper模版商品列表只显示标题和价格,没有显示库存数量 如图: 对于买家来说,无法通过首页快捷的知道某事产品的库存数量 故此在此列出显示库存数量的修改方法。 首先找到根目录下文件/resources/views/hyper/static_pages/ho…

Servlet-Filter实现反爬虫

以前用DotNetCore实现过反爬虫功能。在tomcat里面可以利用Servlet的Filter类实现请求的控制来达到反爬虫功能,进而增强JRT的web安全。 实现黑名单过滤器,对在黑名单列表的IP的所有请求都跳转到警告页面,业务各种请求自行定义加入黑名单 /* …

Vanna-ai 大模型开源项目 基于RAG的TextToSql框架 安装和使用教程

github项目地址:vanna-ai/vanna: 🤖 与 SQL 数据库聊天📊。通过 LLMs使用RAG进行准确的TextToSQL的生成工作 🔄 。 Vanna 是 MIT 许可的开源 Python RAG(检索增强生成)框架,用于 SQL 生成和相关…

逻辑回归模型-逻辑回归算法原理-逻辑回归代码与实现-笔记整合

通过一段时间的学习,总算把逻辑回归模型弄清楚了 《老饼讲解-机器学习》www.bbbdata.com中是讲得最清晰的,结合其它资料,整理一个完整的笔记如下,希望能帮助像我这样入门的新人,快速理解逻辑回归算法原理和逻辑回归实…

【解决去除springboot-内嵌tomcat的异常信息显示】去掉版本号和异常信息

调用这个,能复现tomcat的报错 http://localhost:8182/defaultroot/DownloadServlet?modeType2&pathhtml&FileName…\login.jsp&name123&fiewviewdownload2&cdinline&downloadAll2 springboot项目如何隐藏? springboot内嵌了to…

人类连接的桥梁:探索Facebook如何连接世界

随着技术的发展和全球化的进程,我们的世界正在变得越来越紧密相连。在这个过程中,社交媒体平台扮演了一个至关重要的角色,为人们提供了一个跨越国界、文化和语言的交流平台。其中,Facebook作为全球最大的社交媒体平台,…

学习BOM

目录 前言: 1. BOM组成: 1.1Window 对象: 1.1Location 对象: 1.2Navigator 对象: 1.2.1 navigator 对象包含了关于浏览器的信息包括: 1.3History 对象: 1.4常用的history的方法和属性: 1.4Document…

手写spring IOC底层源码来模拟spring如何利用多级缓存解决循环依赖的问题

在文章开始之前,先来看一张spring IOC加载过程的脑图吧 Spring IOC的加载过程 首先,当我们去new了一个applicationContext,它底层呢就会把我们配置的bean进行扫描,然后创建成一个一个的beanDefinition放在我们的beanDefinitionMap中,此时就有了一切创造bean的原料信…

智慧园区解决方案一站式资料大全:标准规范顶层设计指南、供应商整体解决方案及售前PPT、标准白皮书、全国前50智慧园区集成商方案等全套600份,一次性打包下载

关键词:智慧园区解决方案,智慧园区整体解决方案,智慧园区建设总体方案设计,智慧园区综合管理系统,智慧产业园区解决方案,智慧产业园区规划方案,智慧园区建设规划方案,智慧工业园区建…

【数据结构1-基本概念和术语】

这里写自定义目录标题 0.数据,数据元素,数据项,数据对项,数据结构,逻辑结构,存储结构1.结构1.1逻辑结构1.2存储结构1.2.1 顺序结构1.2.2链式结构 1.3数据结构1.3.1基本数据类型1.3.2抽象数据类型1.3.2.1一个…

基于ssm幼儿资源互助共享平台的设计论文

目 录 摘 要 I Abstract II 第1章 前 言 2 1.1 研究背景 3 1.2 研究现状 3 1.3 系统开发目标 3 第2章 系统开发环境 5 2.1 SSM框架 5 2.2 JAVA简介 6 2.3 ECLIPSE 开发环境 7 2.4 Tomcat服务器 7 2.5 MySQL数据库 7 第3章 需求分析 9 3.1 需求分析 9 3.2 系统可行性分析 9 3.3…

ICV:《中美量子产业融资比较分析》

近日,全球前沿科技咨询公司ICV发布了A Comparative Analysis of Quantum Industry Financing in the U.S and China(美国和中国量子产业融资比较分析)报告。该报告旨在对中美两国在量子技术领域的投融资情况进行比较分析,探讨其差…

服务器数据恢复—xfs文件系统节点、目录项丢失的数据恢复案例

服务器数据恢复环境: EMC某型号存储,该存储内有一组由12块磁盘组建的raid5阵列,划分了两个lun。 服务器故障: 管理员为服务器重装操作系统后,发现服务器的磁盘分区发生改变,原来的sdc3分区丢失。由于该分区…

目标检测算法——YOLOV9——算法详解

一、主要贡献 深度网络输入数据在逐层进行特征提取和空间变换时,会丢失大量的信息。针对 信息丢失问题,研究问题如下: 1)从可逆功能的角度对现有深度神经网络架构进行了理论分析,解释了许多过去难以解释的现象&#xf…
最新文章