返回顶部
首页 > 资讯 > 后端开发 > Python >Python实现解析ini配置文件的示例详解
  • 709
分享到

Python实现解析ini配置文件的示例详解

2024-04-02 19:04:59 709人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录楔子ini 文件特殊格式小结楔子 在开发过程中,配置文件是少不了的,只不过我们有时会将 py 文件作为配置文件(config.py),然后在其它的模块中直接导入。这样做是一个好主

楔子

开发过程中,配置文件是少不了的,只不过我们有时会将 py 文件作为配置文件(config.py),然后在其它的模块中直接导入。这样做是一个好主意,不过配置文件是有专门的格式的,比如:ini, yaml, toml 等等。

而对于 python 而言,也都有相应的库来解析相应格式的文件,下面我们来看看 ini 文件要如何解析。

ini 文件

先来了解一下 ini 文件的格式:

[satori]
name = 古明地觉
age = 16
where = 东方地灵殿

[koishi]
name = 古明地恋
age = 15
where = 东方地灵殿

[marisa]
name = 雾雨魔理沙
age = 17
where = 魔法森林

; 以分号或井号开头表示注释,不影响

ini 文件总分可以分为三块,分别是:

  • section:就是写在 [] 里面的内容,可以把它理解为一个段;
  • parameter:以 key = value  的形式出现,比如 age = 16,那么 age 就是 key、16 就是 value,注意:每个 section 都有自己的 parameter;
  • 注释:以分号开头,无影响,会被忽略掉。

可以看到结构还是比较清晰的,那么 Python 要如何解析呢?Python 解析 ini 文件需要使用一个名叫 configparser 的库,这个库是自带的,我们可以直接用。

import configparser

# 实例化一个 ConfigParser 实例
config = configparser.ConfigParser()
# 打开 ini 文件
config.read("cfg.ini", encoding="utf-8")

# 获取所有的 section
print(config.sections())
"""
['satori', 'koishi', 'marisa']
"""

# 获取某一个 section 的所有 parameter
print(config["satori"])
"""
<Section: satori>
"""

# 我们可以像操作字典一样操作 parameter
print(list(config["satori"]))
"""
['name', 'age', 'where']
"""
print(list(config["satori"].values()))
"""
['古明地觉', '16', '东方地灵殿']
"""
print(list(config["satori"].items()))
"""
[('name', '古明地觉'), ('age', '16'), ('where', '东方地灵殿')]
"""
# 获取某个 key 对应的 value
# 如果 key 不存在则抛出 KeyError
print(config["marisa"]["where"])
"""
魔法森林
"""
# 也可以调用 get 方法
# 在 key 不存在时,指定一个默认值
print(config["marisa"].get("age"))
"""
17
"""
# 我们发现 age 居然是一个字符串
# 因为默认解析得到的都是字符串
print(config["marisa"]["age"].__class__)
"""
<class 'str'>
"""

# 可以通过 getint 获取
# 会将 value 转成整型,但转化失败的话会报错
# 除了 getint 之外,还有 getfloat、getboolean
print(config["marisa"].getint("age") == 17)
"""
True
"""

# 最后也可以直接转成字典
print(dict(config["koishi"]))
"""
{'name': '古明地恋', 'age': '15', 'where': '东方地灵殿'}
"""
print(dict(config))
"""
{'DEFAULT': <Section: DEFAULT>, 
 'satori': <Section: satori>, 
 'koishi': <Section: koishi>, 
 'marisa': <Section: marisa>}
"""
print({k: dict(v) for k, v in config.items()})
"""
{'DEFAULT': {}, 
 'satori': {'name': '古明地觉', 
            'age': '16', 
            'where': '东方地灵殿'}, 
 'koishi': {'name': '古明地恋', 
            'age': '15', 
            'where': '东方地灵殿'}, 
 'marisa': {'name': '雾雨魔理沙', 
            'age': '17', 
            'where': '魔法森林'}}
"""

可以看到还是比较容易的,因为 ini 这种文件格式本身就很简单。除了读取文件,我们还可以进行写入。

import configparser

# 实例化一个 ConfigParser 类的实例
config = configparser.ConfigParser()
config["basic"] = {"Host": "127.0.0.1",
                   "Port": "8888",
                   "Username": "satori"}

config["thread"] = {}
config["thread"]["name"] = "my_thread"
config["thread"]["num"] = "3"

with open("cfg.ini", "w", encoding="utf-8") as f:
    config.write(f)

虽然成功写入了,但是我们看到结果变成了小写。是的,对于 parameter 来说,无论是大写还是小写,写入文件的时候都会变成小写。然后读取也是,无论 ini 文件中是大写还是小写,读取之后都会变成小写。

注意:大小写不敏感只是针对于 parameter,对于 section 来说还是区分大小写的。

特殊格式

我们上面配置的 parameter 中的 key, value 都是一个普通的单词,但其实我们还可以配置的更加复杂一些。

我们操作一波,看看能否正常解析。

import configparser

# 实例化一个 ConfigParser 实例
config = configparser.ConfigParser()
# 打开 ini 文件
config.read("cfg.ini", encoding="utf-8")

print(dict(config["简单值"]))
"""
{'键': '值', 
 '键 里面 有空格': '合法', 
 '值 里面 有空格': '也 合 法', 
 '等号 周围 有 空格': '仍然合法', 
 '你也使用': '代替等号'}
"""

print(dict(config["所有值都是字符串"]))
"""
{'这是字符串': '123', 
 '这也是字符串': '3.14', 
 '整数、浮点数、布尔值都是字符串': 'true'}
"""
# true True yes 都可以转成布尔值 True
# false False no 都可以转成布尔值 False
print(config["所有值都是字符串"].getboolean(
    '整数、浮点数、布尔值都是字符串'))
"""
True
"""

print(dict(config["值占多行"]))
"""
{'洪世贤': '你怎么穿品如的衣服啊\n还用人东西'}
"""

print(dict(config["值为空字符串"]))
"""
{'key1': '', 'key2': ''}
"""

结果是正常的,但是很明显上面这种做法有点闲的没事了,以后就统一写成 key = value 的形式即可。另外如果 ini 文件中只有 key 没有 value 的话,默认是报错的,但可以通过一个参数改变这一点:

import configparser

# "key =" 这种形式不叫没有值,它是有值的,值为空字符串
# "key" 这种形式才是没有值,解析的时候默认会报错
# 可以通过一个参数改变这一点
config = configparser.ConfigParser(allow_no_value=True)
config.read_string(
    """
[Mysqld]
user = mysql
skip-bdb
""")
print(dict(config["mysqld"]))
"""
{'user': 'mysql', 'skip-bdb': None}
"""

除此之外,name 之间还可以发生引用。

import configparser

config = configparser.ConfigParser()

# 可以通过 %(key)s 的方式对同一个 section 中的其它 key 进行引用
# 所以如果想表示一个 % 的话,需要写两个 %,因为涉及到转义
config.read_string("""
[section1]
user = 古明地觉
age = 16
info = %(user)s--%(age)s 
percent = 80%% 
""")

print(dict(config["section1"]))
"""
{'user': '古明地觉', 'age': '16', 
 'info': '古明地觉--16', 'percent': '80%'}
"""

还是很简单的,如果想引用其它的 section 中的 name 要怎么做呢?

import configparser

# 指定该参数之后,我们就不能通过 %(name)s 的方式引用了
# 需要使用 ${name} 这种格式,显然更方便了
config = configparser.ConfigParser(
    interpolation=configparser.ExtendedInterpolation()
)

config.read_string("""
[DEFAULT]
默认的 = 自动加入到每一个 section 中

[section1]
user = 古明地觉
age = 16
info = ${user} -- ${age} 

[section2]
info = ${section1:user}, ${section1:age}
""")

print(dict(config["section1"]))
"""
{'user': '古明地觉', 
 'age': '16', 
 'info': '古明地觉 -- 16', 
 '默认的': '自动加入到每一个 section 中'}
"""
print(dict(config["section2"]))
"""
{'info': '古明地觉, 16', 
 '默认的': '自动加入到每一个 section 中'}
"""

小结

以上就是 ini 文件的一些简单用法,以后我们在写配置的时候,不妨使用一些专门用来表示配置的文件格式,不一定非要写在 py 文件里面。

而且使用 ini 等配置文件的一个好处就是,即便不懂 Python 的人也能看懂;或者这个配置文件不一定是要由你来写,可能是别人写,而那个人不用 Python,但是通过 ini 文件的话就省去了沟通的成本。

后续我们继续介绍其它种类的配置文件,比如 yaml, toml,因为 ini 虽然简单,但表达能力还是很有限的。而 yaml 和 toml 的表达能力要更丰富,应用领域也要更广一些。

以上就是Python实现解析ini配置文件的示例详解的详细内容,更多关于Python解析ini配置文件的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python实现解析ini配置文件的示例详解

本文链接: https://lsjlt.com/news/120475.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python实现解析ini配置文件的示例详解
    目录楔子ini 文件特殊格式小结楔子 在开发过程中,配置文件是少不了的,只不过我们有时会将 py 文件作为配置文件(config.py),然后在其它的模块中直接导入。这样做是一个好主...
    99+
    2024-04-02
  • Python ini配置文件示例详解
    目录INI介绍关于configparserINI文件格式读取配置文件写入配置文件总结INI介绍 INI是英文“初始化”(initialization)的缩写,...
    99+
    2024-04-02
  • Python实现解析yaml配置文件的示例详解
    目录楔子字典数组标量引用生成 yaml 文件楔子 前面我们介绍了 ini 格式的配置文件,本次来看看 yaml,它的表达能力相比 ini 更加的强大。yaml 文件以 .yml 结尾...
    99+
    2024-04-02
  • C++实现读写ini配置文件的示例代码
    目录1.概述2.ini格式语法3.配置读取4.demo示例5.自动生成读取代码1.概述 配置文件的读取是每个程序必备的功能,配置文件的格式多种多样,例如:ini格式、json格式、x...
    99+
    2023-05-19
    C++读写ini配置文件 C++读写ini文件 C++ ini文件
  • 利用C++实现简易的.ini配置文件解析器
    目录前言代码Util.hUtil.cppmain.cpp运行截图前言 实现了一个比较简单的ini文件解析器,下面介绍一下怎么用的 在最开始实例化一个IniHelper 可以使用默认的...
    99+
    2023-03-09
    C++实现ini配置文件解析器 C++ ini配置文件解析 C++ 配置文件解析
  • Python的ini配置文件你了解吗
    目录INI介绍关于configparserINI文件格式读取配置文件总结INI介绍 INI是英文“初始化”(initialization)的缩写,被用来对操作...
    99+
    2024-04-02
  • C++BoostPropertyTree解析INI文件详解
    目录前言什么是property_tree?实现代码前言 PropertyTree是一个非常牛叉的东西!虽然很小,但是,相当需要,相当重要!因为,很多的东西,我们不需要去开发,只需要去...
    99+
    2024-04-02
  • 怎么用C++实现简易的.ini配置文件解析器
    本篇内容介绍了“怎么用C++实现简易的.ini配置文件解析器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在最开始实例化一个IniHelpe...
    99+
    2023-07-05
  • Python中ini配置文件读写的实现
    导入模块 import configparser # py3 写入 config = configparser.ConfigParser() config["DEFAULT"] ...
    99+
    2024-04-02
  • java 读写 ini 配置文件的示例代码
    下面通过代码先看下java 读写 ini 配置文件,代码如下所示: package org.fh.util; import java.io.BufferedReader; impo...
    99+
    2024-04-02
  • GO语言ini配置文件的读取操作示例分析
    小编给大家分享一下GO语言ini配置文件的读取操作示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!go适合做什么go是golang的简称,而golang可以...
    99+
    2023-06-15
  • MyBatis配置文件解析与MyBatis实例演示
    MyBatis介绍 MyBatis是一个持久层的ORM框架,使用简单,学习成本较低。可以执行自己手写的SQL语句,比较灵活。但是MyBatis的自动化程度不高,移植性也不高,有时从一...
    99+
    2024-04-02
  • INI文件结构的示例分析
    小编给大家分享一下INI文件结构的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!INI文件结构INI文件是一种按照特点方式排列的文本文件。每一个INI文件...
    99+
    2023-06-17
  • Python配置文件管理之ini和yaml文件读取的实现
    1. 引言 当我们设计软件时,我们通常会花费大量精力来编写高质量的代码。但这往往还不够,一个好的软件还应该考虑其整个系统,如测试、部署、网络等。其中最重要的一个方面是配置管理。 良好...
    99+
    2023-02-28
    Python ini文件读取 Python ini和yaml文件读取
  • 怎么用Python的ini配置文件
    今天小编给大家分享一下怎么用Python的ini配置文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。INI介绍INI是英文...
    99+
    2023-06-29
  • 详解C#如何实现读写ini文件
    目录介绍1.创建一个ini文件2.创建一个winform界面3.添加一个ini管理类4.添加winform代码介绍 INI文件格式由节、键、值组成。 节 [section] 参数 (...
    99+
    2024-04-02
  • 详解CAPL 脚本对.ini 配置文件的高阶操作
    目录前言批量读取代码讲解批量写入代码讲解更新INI文件键值对删除INI文件键值对增加INI文件键值对新建INI文件前言 前面其实我们已经掌握了对配置文件,文本文件的读写函数和方法,如...
    99+
    2024-04-02
  • Python动态配置管理Dynaconf的实现示例详解
    目录正文1.准备2.初步使用DynaConf3.高级使用正文 Dynaconf 是一个 Python 的第三方模块,旨在成为在 Python 中管理配置的最佳选择。 它可以从各种来源...
    99+
    2024-04-02
  • Nginx配置文件nginx.conf的基本配置实例详解
    目录前言1. Nginx配置样例2. Nginx负载均衡方式2.1 轮询2.2 权重2.3 Nginx解决集群共享session问题的方案3. Nginx动静分离(静态资源...
    99+
    2024-04-02
  • C++实现ini文件读写的示例代码
    目录介绍1.使用INIReader.h头文件1.INIReader.h2.test.ini3.INIReaderTest.cpp2.使用ini.h头文件1.ini.h2.config...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作