python操作ini文件
简介
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文件的更多相关文章
- python解析ini文件
python解析ini文件 使用configparser - Configuration file parser sections() add_section(section) has_section ...
- 关于C#操作INI文件的总结
原文:关于C#操作INI文件的总结 INI文件其实是一种具有特定结构的文本文件,它的构成分为三部分,结构如下: [Section1]key 1 = value2key 1 = value2--[S ...
- Python操作Zip文件
Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt. import zipfile # ...
- C#利用Vini.cs操作INI文件
VClassLib-CS项目Github地址:https://github.com/velscode/VClassLib-CS VINI文档地址:https://github.com/velscode ...
- 【python-ini】python读写ini文件
[python-ini]python读写ini文件 本文实例讲述了Python读写ini文件的方法.分享给大家供大家参考.具体如下: 比如有一个文件update.ini,里面有这些内容: 1 2 ...
- [转]C#操作INI文件
在很多的程序中,我们都会看到有以.ini为后缀名的文件,这个文件可以很方便的对程序配置的一些信息进行设置和读取,比如说我们在做一个程序后台登陆的时候,需要自动登录或者是远程配置数据库连接,及保存密码设 ...
- python操作txt文件中数据教程[4]-python去掉txt文件行尾换行
python操作txt文件中数据教程[4]-python去掉txt文件行尾换行 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文章 python操作txt文件中数据教程[1]-使用pyt ...
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...
- python操作txt文件中数据教程[2]-python提取txt文件
python操作txt文件中数据教程[2]-python提取txt文件中的行列元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果-将txt中元素提取并保存在c ...
随机推荐
- 893. Groups of Special-Equivalent Strings - LeetCode
Question 893. Groups of Special-Equivalent Strings Solution 题目大意: AB两个字符串相等的条件是:A中偶数位出现的字符与B中偶数位出现的字 ...
- 637. Average of Levels in Binary Tree - LeetCode
Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这 ...
- 直接将A类库复制到vs中的B类库,但是解决方案菜单中不显示
1.将要复制的文件夹复制粘贴到你要用的vs项目中 2.右键 添加 现有项目 选中xxxxx.csproj文件 点击 打开 就可以了
- django框架5
内容概要 模板语法之过滤器(类似于内置函数) 模板语法之标签(类似于流程控制) 自定义过滤器.标签.inclusion_tag 模板的导入 模板的继承 注释语法补充 前期数据准备(测试环境搭建) al ...
- 为什么 SQL 语句使用了索引,但却还是慢查询?
一.索引与慢查询 聊一聊索引和慢查询,经常遇到的一个问题:一个SQL语句使用了索引,为什么还是会记录到慢查询日志之中? 为了说明,创建一个表t,该表3个字段,一个主键索引,一个普通索引 CREATE ...
- 为什么要使用TypeScript(Why Typescript?)
客观原因 静态类型. 在编译期即可进行静态类型分析, 减少JS运行时类型错误. 语法功能强大 对于大型项目具有更好构建机制,加入了类.接口.泛型.模块等概念. 兼容JavaScript 与现存的Jav ...
- SQL注入漏洞篇
一篇SQL注入漏洞汇总,更新中-- 如有缺陷 望大佬指正 SQL注入产生的原因? 当程序执行逻辑时没有对用户输入的参数做过滤处理,使参数直接与后台数据库产生逻辑交互,即SQL注入黑客就可以利用各种SQ ...
- BUUCTF-BJDCTF2020]just_a_rar
BJDCTF2020]just_a_rar 压缩包提示是四位数密码 爆破得知压缩包密码 16进制查看解压的图片后发现flag flag{Wadf_123}
- vue基本原理
当一个Vue实例创建时,Vue会遍历data中的属性,用Object.defineProperty(vue3.0使用proxy)将它们转为getter/setter,并且在内部追踪相关依赖,在属性被访 ...
- RPA应用场景-银行回单查询
场景概述银行回单查询 所涉系统名称银行网银 人工操作(时间/次) 5 分钟 所涉人工数量 4 操作频率不定时 场景流程 1.收到外派业务员申请查询收入银行回单的邮件: 2.依据邮件中提供的客户信息进入 ...