简介

ini文件作为常见的配置文件,因此需要对ini文件做处理,此处使用configparser模块,本文介绍以下ini文件常用的处理方式。

需要读取的ini文件

如下文件,[ ]包含的称为section,其下面的称为option

; section
[timeout]
; option
timeout = 10
[max_time]
max_time = 200
[min_time]
min_time = 10
[city]
city = ['南京', "北京", "武汉"]

读取ini文件

通常写法

import pathlib
import configparser ini_path = pathlib.Path(__file__).parent.joinpath("test.ini")
# 获取ini文件对象
config = configparser.ConfigParser()
# 读取ini的文件名称
config.read(ini_path, encoding="utf8")
# 获取section为city, option为city的值
print(config.get("city", "city"))
# 获取section为timeout, option为timeout的值
print(config.get("timeout", "timeout"))
# 获取所有的sections,以列表形式返回
print(config.sections())
# 获取sections为timeout的所有options,以列表形式返回
print(config.options("timeout"))
# 判断section是否包含timeout
print(config.has_section("timeout"))
# 判断section是否包含timeout2
print(config.has_section("timeout2"))
# 判断section为timeout的下面是否包含timeout
print(config.has_option("timeout", "timeout"))
# 判断section为timeout的下面是否包含timeout2
print(config.has_option("timeout", "timeout2"))
['南京', "北京", "武汉"]
10
['timeout', 'max_time', 'min_time', 'city']
['timeout', 'timeout2']
True
False
True
False

需要注意的是,当读取的值包含中文时,需要在read的时候添加encoding编码为utf8,以保证不会出现乱码。

读取ini配置的几种方式

读取的来源不同,但后续的读取信息的操作都是一致的

从字典中读取ini配置

这可以从字典中读取对应key的value,不过一般对于某个key的value值直接使用索引读取即可,但这个可以方便读取到某一层级的所有key值以及是否包含某个key。

dict_data = {
"timeout": {"timeout": 10, "timeout2": 20},
"max_time": {"max_time": 200},
"min_time": {"min_time": 10},
"city": {"city": ["南京", "北京", "武汉"]},
}
config.read_dict(dict_data)
print(config.get("city", "city"))
print(config.get("timeout", "timeout"))
print(config.sections())
print(config.options("timeout"))

从给定字符串中读取ini配置

这种方法相当于将直接从ini文件的字符串中读取,一般不会这么做

with open(ini_path, mode="r", encoding="utf8") as f:
data = f.read()
print(data)
config.read_string(data)
print(config.get("city", "city"))
print(config.get("timeout", "timeout"))
print(config.sections())
print(config.options("timeout"))

读取ini文件的文件对象

使用open获取fp对象进行操作, f.name可以省略

# 已废弃,使用read_file代替
config.readfp()
with open(ini_path, encoding="utf8") as f:
config.read_file(f, f.name)
print(config.get("city", "city"))
print(config.get("timeout", "timeout"))
print(config.sections())
print(config.options("timeout"))

读取ini的文件名称或者path对象也可以

上述通常已介绍,此处不再赘述。

config.read(ini_path, encoding="utf8")

另外,在读取配置时候可以指定读取值的类型

config.getboolean
config.getfloat
config.getint

写入ini文件

import pathlib
import configparser ini_path = pathlib.Path(__file__).parent.joinpath("test.ini")
config = configparser.ConfigParser()
# 添加section
config.add_section("huawei")
# 添加option并设置值,只能是string值
config.set("huawei", "huawei", "1")
# 写入ini文件,注意写入的mode会影响是否覆盖ini文件
with open(ini_path, "a+", encoding="utf8") as f:
config.write(f)

补充

configparser中其实有三个,分别是

# 通常是最常用的解析ini文件的配置
configparser.ConfigParser()
# 可以匹配正则的标题和选项的配置,类似于模糊查询的那种
configparser.RawConfigParser()
# 已废弃,与configparser.ConfigParser()作用一致,在python3.2后改为前者,将在python3.12中删除
configparser.SafeConfigParser()

python操作ini文件的更多相关文章

  1. python解析ini文件

    python解析ini文件 使用configparser - Configuration file parser sections() add_section(section) has_section ...

  2. 关于C#操作INI文件的总结

    原文:关于C#操作INI文件的总结   INI文件其实是一种具有特定结构的文本文件,它的构成分为三部分,结构如下: [Section1]key 1 = value2key 1 = value2--[S ...

  3. Python操作Zip文件

    Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt. import zipfile # ...

  4. C#利用Vini.cs操作INI文件

    VClassLib-CS项目Github地址:https://github.com/velscode/VClassLib-CS VINI文档地址:https://github.com/velscode ...

  5. 【python-ini】python读写ini文件

    [python-ini]python读写ini文件 本文实例讲述了Python读写ini文件的方法.分享给大家供大家参考.具体如下: 比如有一个文件update.ini,里面有这些内容:   1 2 ...

  6. [转]C#操作INI文件

    在很多的程序中,我们都会看到有以.ini为后缀名的文件,这个文件可以很方便的对程序配置的一些信息进行设置和读取,比如说我们在做一个程序后台登陆的时候,需要自动登录或者是远程配置数据库连接,及保存密码设 ...

  7. python操作txt文件中数据教程[4]-python去掉txt文件行尾换行

    python操作txt文件中数据教程[4]-python去掉txt文件行尾换行 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文章 python操作txt文件中数据教程[1]-使用pyt ...

  8. python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件

    python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...

  9. python操作txt文件中数据教程[2]-python提取txt文件

    python操作txt文件中数据教程[2]-python提取txt文件中的行列元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果-将txt中元素提取并保存在c ...

随机推荐

  1. linux部署项目(前后端分离项目)

    参考博客 技术栈 路飞学城部署 vue + nginx + uwsgi + django + mysql + redis(就是一个key - value型数据库,缓存型数据库,内存型数据库) 部署步骤 ...

  2. 记一次百万行WPF项目代码的重构记录

    此前带领小组成员主导过一个百万行代码上位机项目的重构工作,分析项目中存在的问题做了些针对性的优化,整个重构工作持续了一年半之久. 主要针对以下问题: 1.产品型号太多导致代码工程的分支太多,维护时会产 ...

  3. kvm 虚拟化技术 1.2 之配置网络桥接

    实验一:配置网路桥接模式 默认kvm的网络是NAT模式,一般生产环境用桥接模式,把虚拟机改成桥接模式 1.查看是否安装网桥设备 [root@kibana opt]# rpm -qa|grep brid ...

  4. ElasticSearch7.3学习(二十六)----搜索(Search)参数总结、结果跳跃(bouncing results)问题解析

    1.preference 首先引入一个bouncing results问题,两个document排序,field值相同:不同的shard上,可能排序不同:每次请求轮询打到不同的replica shar ...

  5. 102_Power Pivot DAX 排名后加上总排名数

    焦棚子的文章目录 请点击下载附件 1.背景 每次写rank的时候,有了排名就可以了,排名1,2,3,4,5这样不是很清晰吗?但是中国式报表的老板们说你能不能在排名后面加一个总排名数呢,就像1/5,2/ ...

  6. Oracle数据库丢失表排查思路

    Oracle数据库丢失表排查思路 说明:由于系统采用ID取模分表法进行Oracle数据存储,某日发现Oracle数据库中缺少对应的几张业务数据表,遂进行相关问题查询,简单记录一下排查思路: 由于我们代 ...

  7. 0-1knapsack

    Python 实现0-1背包问题(回溯法) 题目 解题思路 回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(bounding function)来处死那些实际上不可能产生所需 ...

  8. Kubernetes client-go DeltaFIFO 源码分析

    概述Queue 接口DeltaFIFO元素增删改 - queueActionLocked()Pop()Replace() 概述 源码版本信息 Project: kubernetes Branch: m ...

  9. R数据分析:如何简洁高效地展示统计结果

    之前给大家写过一篇数据清洗的文章,解决的问题是你拿到原始数据后如何快速地对数据进行处理,处理到你基本上可以拿来分析的地步,其中介绍了如何选变量如何筛选个案,变量重新编码,如何去重,如何替换缺失值,如何 ...

  10. 如何优化PlantUML流程图(时序图)

    这篇文章用来介绍,如何画出好看的流程图. 1. 选择合适的组件 1.1 plantuml官方提供的组件 1.2 加载图片 1.2.1 加载本地图片 1.2.2 加载网络图片 1.2.3 图片资源 2. ...