python3 ConfigParser配置文件解析(config.ini).ini文件节点字段命名规范

news2024/11/20 6:26:35

在这里插入图片描述

文章目录

  • Python3 ConfigParser配置文件解析
    • 什么是ConfigParser
    • 如何使用ConfigParser
      • 读取配置文件
      • 写入配置文件
      • 删除配置
    • ConfigParser的常见问题和解决方案
      • 大小写敏感性
      • 无值的键
      • 非标准键名
    • .ini 文件节点字段命名规范
      • 节(Section)命名规范
      • 键(Key)命名规范
    • DEFAULT节点的特殊性
      • 使用示例
    • config.sections()不包含[DEFAULT]节点
    • 结论

Python3 ConfigParser配置文件解析

在任何大型应用中,配置文件是必不可少的一部分。它们提供了一种方法来管理应用程序设置,而无需直接修改代码。Python为处理这些配置文件提供了一个内置库,名为ConfigParser。

什么是ConfigParser

ConfigParser模块在Python中用于处理配置文件。它具有一个类RawConfigParser和它的两个子类ConfigParserSafeConfigParser,用于读取和写入数据到INI格式的配置文件。

INI文件包含节(section),每个节下可以包含键-值对。以下是一个简单的例子:

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes

[bitbucket.org]
User = hg

[topsecret.server.com]
Port = 50022
ForwardX11 = no

在这个例子中,“DEFAULT”, “bitbucket.org”, 和 “topsecret.server.com” 是节,而其下面的 ServerAliveInterval, Compression 等是键,等号右边的是对应的值。

如何使用ConfigParser

读取配置文件

首先,我们需要导入ConfigParser模块,并创建一个ConfigParser对象。然后,我们可以使用read()函数来读取配置文件。

import configparser

config = configparser.ConfigParser()
config.read('example.ini')

要访问特定的节和键,我们可以像操作字典一样操作ConfigParser对象:

print(config['bitbucket.org']['User'])  # 输出: hg

要打印INI配置文件的所有内容,可以遍历ConfigParser对象中的所有节和键。下面是一个例子:

(注意:config.sections()不包含[DEFAULT]节点,要单独打印)

import configparser

config = configparser.ConfigParser()
config.read('example.ini')

# Print DEFAULT section
print("[DEFAULT]")
for key in config['DEFAULT']:
    print("{} = {}".format(key, config['DEFAULT'][key]))

for section in config.sections():
    print("[{}]".format(section))
    for key in config[section]:
        print("{} = {}".format(key, config[section][key]))

在这个代码中,config.sections()返回一个包含所有节名的列表。然后我们遍历每一个节,并在循环内部,遍历每一个节的所有键。

这样就会按照原始的INI格式,将配置文件的所有内容打印出来。

写入配置文件

我们可以通过简单地赋值来更改或添加节、键和值。

config['bitbucket.org']['User'] = 'different_user'

with open('example.ini', 'w') as configfile:
    config.write(configfile)

这将修改 “bitbucket.org” 节中的 “User” 键的值,并将结果写回 “example.ini” 文件。

删除配置

与字典类似,我们可以使用del语句删除配置文件中的键或节:

del config['topsecret.server.com']

with open('example.ini', 'w') as configfile:
    config.write(configfile)

ConfigParser的常见问题和解决方案

大小写敏感性

默认情况下,ConfigParser将所有键和节名转换为小写。如果需要保持原样,可以在创建ConfigParser对象时传递一个参数。

config = configparser.ConfigParser(allow_no_value=True)

无值的键

INI文件可能包含没有值的键。要使ConfigParser接受这些键,我们可以在创建ConfigParser对象时传递一个参数。

config = configparser.ConfigParser(allow_no_value=True)

非标准键名

有时候,你可能会遇到一些含有特殊字符的键名。为了处理这种情况,我们可以使用Optionxform函数来自定义键的格式。

def my_optionxform(option):
    return option

config = configparser.ConfigParser()
config.optionxform = my_optionxform

.ini 文件节点字段命名规范

INI文件是一种简单的数据格式,它将配置数据存储为纯文本,并使用节和键-值对进行组织。以下是关于INI文件节点字段(即节和键)命名规范的一些常见指导原则。

节(Section)命名规范

  1. 有意义的名称:每个节的名称应清楚地反映该节中包含的配置信息。例如,如果一个节包含数据库设置,那么可以命名为 [database]

  2. 独特性:每个节的名称都应该是唯一的。尽管大多数解析器在遇到重复的节名称时会合并内容,但这可能会引起混淆或不可预测的行为。

  3. 避免特殊字符:虽然大多数解析器都可以处理包含空格、下划线、破折号和其他非字母数字字符的节名,但最好避免使用它们,以确保与所有解析器的兼容性。

键(Key)命名规范

  1. 描述性:键的名称应详细且具有描述性,让读者能立即理解其用途。例如,usernamepassword

  2. 大小写敏感性:INI文件通常不区分键名的大小写,但某些解析器可能会。因此,建议始终使用一致的大小写规则。

  3. 避免空格和特殊字符:尽管大多数解析器都可以处理包含空格和其他非字母数字字符的键名,但为了确保与所有解析器的兼容性,最好避免使用它们。

  4. 不要重复:虽然有些解析器允许在同一个节中定义多个相同的键,但这可能导致混淆和不可预测的行为。因此,每个节中的键应该是唯一的。

清晰和简洁的命名对于确保配置文件的可读性和可维护性至关重要。

DEFAULT节点的特殊性

在INI配置文件中,DEFAULT节有一些特殊的属性。在ConfigParser模块中,DEFAULT节提供了一种设置和获取默认值的方法。

以下是关于DEFAULT节特殊性的几个关键点:

  1. 全局可用:在ConfigParser中定义的DEFAULT节中的键-值对可以在配置文件的任何地方使用。也就是说,DEFAULT节中的值可以被看作是全局变量,可以在配置文件的其他节中使用。

  2. 默认值:如果某个键在当前的节中没有找到,那么ConfigParser会查找DEFAULT节是否有这个键。如果DEFAULT节中有这个键,那么它的值就会被用作默认值。

  3. 覆盖:虽然DEFAULT节中的值可以在其他节中作为默认值,但是如果其他节中有与DEFAULT节中相同的键,那么该节中的值将覆盖DEFAULT节中的值。

例如,考虑下面的配置文件:

[DEFAULT]
debug = false

[server]
port = 8080

在这个例子中,如果我们尝试获取debug键在server节中的值,虽然在server节中并没有定义debug键,但ConfigParser会返回DEFAULT节中的值,即false

使用示例

import configparser

config = configparser.ConfigParser()
config.read('example.ini')

print(config['server']['debug'])  # 输出: false

这就是Python中DEFAULT节的特殊性。可以看到,通过使用DEFAULT节,我们可以在整个配置文件中定义一组通用的默认值,从而使配置更加灵活和方便。

config.sections()不包含[DEFAULT]节点

Python中的ConfigParser模块使用sections()方法来获取配置文件中所有的节。然而,这个方法返回的列表并不包含DEFAULT节。这是因为在设计上,DEFAULT节被认为是特殊的,并且其值对所有其他节都是可用的。

尽管DEFAULT节不在sections()方法返回的列表中,但我们仍然可以像访问字典一样访问它。例如,config['DEFAULT']会返回一个包含DEFAULT节所有键-值对的字典。

例如,考虑下面的代码:

import configparser

config = configparser.ConfigParser()
config.read('example.ini')

print(config.sections())  # 输出: ['server']
print(config['DEFAULT'])  # 输出: <Section: DEFAULT>

在这个例子中,虽然sections()方法没有返回DEFAULT,但我们仍然可以直接访问它。这是因为在ConfigParser的设计中,DEFAULT节被视为特殊的全局默认值提供者,而不是常规的节。

结论

Python的ConfigParser模块为我们处理配置文件提供了方便。它可以用来读取、修改和写入INI格式的配置文件,使得管理应用程序设置变得更加容易。

参考资料:

  1. Python官方文档:https://docs.python.org/3/library/configparser.html
  2. Python ConfigParser教程:https://www.tutorialspoint.com/python3/python_config_parser.htm
  3. 使用Python ConfigParser处理配置文件:https://stackabuse.com/reading-and-writing-configuration-files-in-python-using-configparser/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

colmap Died with <Signals.SIGKILL: 9>解决方法

我尝试通过Windows的WSL子系统运行COLMAP&#xff0c;标定相机位姿并重建稀疏点云&#xff0c;但是运行的过程中&#xff0c;总是在patch_match_stereo阶段出现&#xff1a;died with <Signals.SIGKILL: 9>。 通过查询资料&#xff0c;发现可能是因为内存不足导致程序异…

C++ 类和对象篇(六) 拷贝构造函数

目录 一、 概念 1. 拷贝构造函数是什么&#xff1f; 2. 为什么要有拷贝构造函数&#xff1f; 3. 怎么用拷贝构造函数&#xff1f; 3.1 创建拷贝构造函数 3.2 调用拷贝构造函数 二、特征 三、编译器生成的默认拷贝构造函数 四、什么时候需要显示的写拷贝构造函数&#xff1f; 拓…

【案例分享】配置设备作为PPPoE Client,实现接入Internet

【微|信|公|众|号&#xff1a;厦门微思网络】 【微思网络www.xmws.cn&#xff0c;成立于2002年&#xff0c;专业培训21年&#xff0c;思科、华为、红帽、ORACLE、VMware等厂商认证及考试&#xff0c;以及其他认证PMP、CISP、ITIL等】 组网需求 企业用户希望把一个站点上的多台…

AtCoder Beginner Contest 228(A-Ex)

A - On and Off (atcoder.jp) &#xff08;1&#xff09;题意 高桥每天在S点钟打开他房间的灯&#xff0c;并在T点钟关灯&#xff0c;指示灯亮起时&#xff0c;日期可能会发生改变&#xff0c;判断是否在X点过后30分时亮着。 &#xff08;2&#xff09;思路 直接模拟即可。 &am…

《机器学习实战》学习记录-ch3

第3章 分类 PS: 个人记录&#xff0c;抄书系列&#xff0c;建议看原书 原书资料&#xff1a;https://github.com/ageron/handson-ml2 目录 第3章 分类3.1 MNIST 数据集3.2 训练二元分类器3.2.1 随机梯度下降 SGD 3.3 性能测量3.3.1 使用交叉验证测量准确率3.3.2 混淆矩阵3.3.3…

在CSV文件读取时id读取之后成了‘锘縤d‘,该怎么修改

问题描述 准备用python实现一个小想法&#xff0c;里边数据可能会有点多&#xff0c;也为了代码能成块展示&#xff0c;所以打算写一个读取文件的函数。此时考虑到python中可以直接将CSV格式文件读取成字典的形式&#xff0c;所以尝试了一下。但是中间出现了错误&#xff0c;第…

【源码】hamcrest 源码阅读 泛型 extends 和迭代器模式

文章目录 前言1. 泛型参数和自定义迭代器1.1 使用场景1.2 实现 2. 值得一提 前言 官方文档 Hamcrest Tutorial 上篇文章 Hamcrest 源码阅读及空对象模式、模板方法模式的应用 本篇文章 迭代器模式 1. 泛型参数和自定义迭代器 hamcrest 作为一个matcher库&#xff0c;把某个…

【Spring内容介绍 | 第一篇】什么是事务管理

前言&#xff1a; 当今软件开发行业中&#xff0c;事务管理是一个不可或缺的重要组成部分。随着企业应用的复杂性和数据交互的增加&#xff0c;确保数据的一致性和完整性变得越来越关键。Spring框架作为一种全功能的应用程序开发框架&#xff0c;为我们提供了强大而灵活的事务管…

腾讯云服务器简介_CVM优势_常见问题解答

腾讯云服务器CVM提供安全可靠的弹性计算服务&#xff0c;腾讯云明星级云服务器&#xff0c;弹性计算实时扩展或缩减计算资源&#xff0c;支持包年包月、按量计费和竞价实例计费模式&#xff0c;CVM提供多种CPU、内存、硬盘和带宽可以灵活调整的实例规格&#xff0c;提供9个9的数…

Dubbo-CVE-2020-1948

APache Dubbo简介 Dubbo是一个分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案。简单的说&#xff0c;dubbo就是个服务框架&#xff0c;如果没有分布式的需求&#xff0c;其实是不需要用的&#xff0c;只有在分布式…

四.Docker容器技术

课程内容 DevOps和云原生Docker基础命令Docker安装软件Docker项目部署 一.DevOps和云原生 1.微服务的痛点 再来看一下我们的微服务架构 &#xff0c; 每个组件都需要服务器去部署&#xff0c;加起来可能需要几十个甚至上百个服务器。 这样的微服务项目在部署上会遇到什么问…

【重拾C语言】六、批量数据组织(一)数组(数组类型、声明与操作、多维数组;典例:杨辉三角、矩阵乘积、消去法)

目录 前言 六、批量数据组织——数组 6.1 成绩统计——数组类型 6.1.1 数组类型 6.1.2 数组声明与操作 6.1.3 成绩统计 6.2 统计多科成绩——多维数组 6.3 程序设计实例 6.3.1 杨辉三角形 6.3.2 矩阵乘积 6.3.3 消去法 6.4 线性表——分类与检索 前言 ChatGPT C语…

Unity 致社区公开信,调整 runtime fee 政策

导读面对此前制定的 "Funtime Fee" 收费政策所引发的用户争议与不满&#xff0c;Unity Create 负责人 Marc Whitten 正式发布了一封致社区的道歉公开信&#xff0c;并详细解释了其定价策略的变更。 我想以此开始&#xff1a;对不起。 在宣布新的 Runtime Fee 政策之…

【Spring内容进阶 | 第三篇】AOP进阶内容

前言&#xff1a; 在前面我们已经粗略的介绍了什么是AOP以及各种基础知识点&#xff0c;而本篇我们将聚焦于AOP的细节&#xff0c;详细的讲解一下AOP中的通知类型&#xff0c;通知顺序&#xff0c;切入点表达式以及连接点。通过对AOP的熟练掌握&#xff0c;我们可以快速编写出低…

【类加载子系统】

文章目录 1. 内存结构2. 类加载器与类的加载过程3. 类加载器分类4. 双亲委派机制 1. 内存结构 Class 文件类加载子系统运行时数据区 方法区堆程序计数器虚拟机栈本地方法栈 执行引擎本地方法接口本地方法库 2. 类加载器与类的加载过程 类加载器子系统负责从文件系统或者网络中加…

基于树种优化的BP神经网络(分类应用) - 附代码

基于树种优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于树种优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.树种优化BP神经网络3.1 BP神经网络参数设置3.2 树种算法应用 4.测试结果&#xff1a;5.M…

旅美经济学家向凌云在美获对冲基金之父威廉·雅克颁授美国文化奖

2023年9月22日,第三届LABA偶像奖(LABA ICON AWARDS )「美国文化奖」颁奖典礼在美国洛杉矶比佛利山庄四季酒店举办。美国本土、欧洲、亚洲都有众多艺术家、经济学家和各行业优秀人才积极参与其中。 对冲基金之父威廉雅克(William Jacques)向经济学家Dr. Lingyun Xiang 向凌云颁发…

【进程管理】认识系统调用函数fork

目录 前言 一.查看进程的pid 二.父子进程 三.查看进程的第二种方式 四.代码创建进程——fork 1.fork的功能 2.fork的返回值 3.fork代码的一般写法 五.对于fork的理解 1.fork干了些什么&#xff1f; 2.fork为什么给子进程返回0&#xff0c;给父进程返回子进程的pid&…

大数据与Hadoop入门理论

一、大数据的3种数据类型 1、结构化数据 可定义&#xff0c;有类型、格式、结构的强制约束 如&#xff1a;RDBMS&#xff08;关系型数据库管理系统&#xff09; 2、非结构化数据 没有规律没有数据约束可言&#xff0c;很复杂难以解析 如&#xff1a;文本文件&#xff0c;视…

第86步 时间序列建模实战:Transformer回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍Transformer回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Sy…