python之读取配置文件模块configparser(二)参数详解
configparser.ConfigParser参数详解
从configparser的__ini__中可以看到有如下参数:
def __init__(self, defaults=None, dict_type=_default_dict,
allow_no_value=False, *, delimiters=('=', ':'),
comment_prefixes=('#', ';'), inline_comment_prefixes=None,
strict=True, empty_lines_in_values=True,
default_section=DEFAULTSECT,
interpolation=_UNSET, converters=_UNSET):
defaults:设置参数的默认值,这里参数是对所有section下的相同参数,如果没有则使用这里设置的值,如下:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath)
#增加参数defaults
cp = configparser.ConfigParser(defaults = {'globalmd5':'parametertest'})
print(cp.defaults())
cp.read(filepath) #删除前分别读取password和IP俩个section下globalmd5的值
get_password_globalmd5 = cp.get('password','globalmd5')
get_IP_minimd5 = cp.get('IP','globalmd5')
print('password_globalmd5:',get_password_globalmd5)
print('IP_globalmd5',get_IP_minimd5)
#删除globalmd5参数
cp.remove_option('password','globalmd5')
#删除后读取globalmd5和minimd5的值
get_password_globalmd5 = cp.get('password','globalmd5')
get_IP_minimd5 = cp.get('IP','globalmd5')
print('password_globalmd5:',get_password_globalmd5)
print('IP_globalmd5',get_IP_minimd5)
上述代码执行结果为:
D:\PycharmProjects\untitled\MyTestProject\MyLearn\config.ini
OrderedDict([('globalmd5', 'parametertest')])
password_globalmd5: functest
IP_globalmd5 parametertest
password_globalmd5: parametertest
IP_globalmd5 parametertest
可以看到删除了‘password’节点下的globalmd5后,依然可以获取defaults中的globalmd5的值
此时config.ini文件中会存在default节点,option则为设置的默认globalmd5
dict_type:字典类型,默认为OrderedDict
allow_no_value:是否允许option的值为空,默认为False,即不允许为空,若为空则报错,如下代码为option设置为空情况:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath) cp = configparser.ConfigParser()
print(cp.defaults())
cp.read(filepath) #设置option值为空
cp.set('IP','url') with open(filepath,'w+') as f:
cp.write(f)
运行代码后报错信息如下:
Traceback (most recent call last):
File "D:/PycharmProjects/untitled/MyTestProject/MyLearn/temp.py", line 11, in <module>
cp.set('IP','url')
File "D:\Python37\lib\configparser.py", line 1197, in set
self._validate_value_types(option=option, value=value)
File "D:\Python37\lib\configparser.py", line 1182, in _validate_value_types
raise TypeError("option values must be strings")
TypeError: option values must be strings
D:\PycharmProjects\untitled\MyTestProject\MyLearn\config.ini
倒数第二行清楚写了option的值必须为str类型。
如果把allow_no_value的值修改为True,代码如下:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath)
#修改allow_no_value值为True
cp = configparser.ConfigParser(allow_no_value = True)
cp.read(filepath) #设置option值为空
cp.set('IP','url') with open(filepath,'w+') as f:
cp.write(f)
则不会报错,查看config.ini文件发现多加了一行url,但没有值:
[password]
globalmd5 = functest [IP]
port = 9900
address = http://sdv.functest.com
url
delimiters:分隔符,即参数和值之间的分隔符,默认为冒号(:)和等号(=),也可以自定义分隔符,如下所示,修改config.ini中使用大于号(>)作为分隔符:
[password]
globalmd5 > functest [IP]
port > 9900
address > http://sdv.functest.com
修改代码使用(>)作为分隔符来操作:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath)
#修改分隔符为>
cp = configparser.ConfigParser(delimiters = ('>'))
cp.read(filepath) get_port = cp.get('IP','port')
print(get_port)
执行代码可以打印正确的值
comment_prefixes:注释前缀,默认为井号(#)或分号(;),可以自己修改,如果分设定的前缀会报错
inline_comment_prefixes:非空行后的注释前缀,默认是没有的,如若确实需要可以添加,修改config.ini文件如下:
[password]
#hello
globalmd5 = functest [IP]
port = 9900 #hello
address = http://sdv.functest.com
若不设置inline_comment_prefixes,则port后面的#hello是最为port的值的,如下代码:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath) cp = configparser.ConfigParser()
cp.read(filepath) get_port = cp.get('IP','port')
print(get_port)
代码执行结果如下:
D:\PycharmProjects\untitled\MyTestProject\MyLearn\config.ini
9900 #hello
若我们把#设置为行内注释符,那么就显示正确了:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath)
#修改行内分隔符为#
cp = configparser.ConfigParser(inline_comment_prefixes = '#')
cp.read(filepath) get_port = cp.get('IP','port')
print(get_port)
上述代码执行结果如下:
D:\PycharmProjects\untitled\MyTestProject\MyLearn\config.ini
9900
strict:是否允许单一配置文件中有相同的section或同一section中有相同option,默认为True,不允许。修改config.ini文件复制globalmd5项并修改值如下:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath) cp = configparser.ConfigParser()
cp.read(filepath) get_globalmd5 = cp.get('password','globalmd5')
print(get_globalmd5)
可以看到执行报错了:
Traceback (most recent call last):
File "D:/PycharmProjects/untitled/MyTestProject/MyLearn/temp.py", line 8, in <module>
cp.read(filepath)
File "D:\Python37\lib\configparser.py", line 696, in read
D:\PycharmProjects\untitled\MyTestProject\MyLearn\config.ini
self._read(fp, filename)
File "D:\Python37\lib\configparser.py", line 1091, in _read
fpname, lineno)
configparser.DuplicateOptionError: While reading from 'D:\\PycharmProjects\\untitled\\MyTestProject\\MyLearn\\config.ini' [line 3]: option 'globalmd5' in section 'password' already exists
最后报错信息时globalmd5重复了,修改strict为False,如下代码:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath) cp = configparser.ConfigParser(strict = False)
cp.read(filepath) get_globalmd5 = cp.get('password','globalmd5')
print(get_globalmd5)
执行结果为:
D:\PycharmProjects\untitled\MyTestProject\MyLearn\config.ini
functest2
使用的是后一个globalmd5的值
empty_lines_in_values:option的值是否允许有空行,默认为True,允许有空行。修改config.ini文件如下:
[password]
globalmd5 = functest [IP]
port = 9900
address = http://sdv.fu nctest.com
此时使用如下代码查询address的值是OK的:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath) cp = configparser.ConfigParser()
cp.read(filepath) get_address = cp.get('IP','address')
print(get_address)
若修改empty_lines_in_values为False,则会报错:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath) cp = configparser.ConfigParser(empty_lines_in_values = False)
cp.read(filepath) get_address = cp.get('IP','address')
print(get_address)
default_section:默认section,默认的节点为‘default’,也可以指定为存在的section,如下代码可以证明:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath) cp = configparser.ConfigParser(default_section = 'IP')
cp.read(filepath) print(cp.defaults())
上述代码执行结果为:
D:\PycharmProjects\untitled\MyTestProject\MyLearn\config.ini
OrderedDict([('port', '9900'), ('address', 'http://sdv.functest.com')])
打印的是IP这个section下面option的键值对
interpolation:插值,默认值为_UNSET,支持section插值,不支持跨section插值,修改config.ini文件如下:
[password]
globalmd5 = functest [IP]
port = 9900
address = http://sdv.functest.com:%(port)s
此时可以使用如下代码查询address的值:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath) cp = configparser.ConfigParser()
cp.read(filepath) get_address = cp.get('IP','address')
print(get_address)
执行结果如下:
D:\PycharmProjects\untitled\MyTestProject\MyLearn\config.ini
http://sdv.functest.com:9900
configparser自动把%(port)s解释为同section下port的值
如果需要跨section引用数据,需要使用ExtendedInterpolation这个子类,当然使用方法稍微不同,修改config.ini文件如下:
[password]
globalmd5 = functest [IP]
port = 9900
address = http://sdv.${password:globalmd5}.com
port_test = ${port}
使用如下代码分别查询port_test和address的值:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath) cp = configparser.ConfigParser(interpolation = configparser.ExtendedInterpolation())
cp.read(filepath) get_port = cp.get('IP','port_test')
get_address = cp.get('IP','address')
print(get_port)
print(get_address)
执行结果如下:
D:\PycharmProjects\untitled\MyTestProject\MyLearn\config.ini
9900
http://sdv.functest.com
这样就比较灵活的来配置文件了
但是不建议使用,因为和基础类的使用方法不一样,容易出错
converters:添加一个转换类型,同getint或getfloat。其值为一个字典类型,键为get*(),值为可调用的,比如getint也可以这样自定义:
import configparser
import os filepath = os.path.join(os.getcwd(),'config.ini')
print(filepath)
#设置converters值为int转换
cp = configparser.ConfigParser(converters = {'toint':int})
cp.read(filepath) get_port = cp.get('IP','port')
print(type(get_port))
get_port = cp.gettoint('IP','port')
print(type(get_port)) print(get_port)
上述代码执行结果如下:
D:\PycharmProjects\untitled\MyTestProject\MyLearn\config.ini
<class 'str'>
<class 'int'>
9900
可以看到,默认get到的是一个str类型,通过自定义的转换函数gettoint(),转换为了int型
python之读取配置文件模块configparser(二)参数详解的更多相关文章
- python之读取配置文件模块configparser(一)基本操作
configparser模块是读取类ini文件使用,其有固定的读取格式如下: [section1] option11 = value11 option12 = value12 .... [sectio ...
- python之读取配置文件模块configparser(三)高级使用---非标准配置文件解析
非标准配置文件也是经常使用的,如何使用configparser来解析? 这要从configparser本身解析结构来说,configparser包含section和option,非标准配置文件只有op ...
- Spring Boot 入门系列(二十五)读取配置文件的几种方式详解!
在项目开发中经常会用到配置文件,之前介绍过Spring Boot 资源文件属性配置的方法,但是很多朋友反馈说介绍的不够详细全面.所以, 今天完整的分享Spring Boot读取配置文件的几种方式! S ...
- python的内置模块xml模块方法 xml解析 详解以及使用
一.XML介绍 xml是实现不同语言或程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单,不过现在还有很多传统公司的接口主要还是xml xml跟html都属于是标签语言 我们主要学 ...
- Python之配置文件模块 ConfigParser
写项目肯定用的到配置文件,这次学习一下python中的配置文件模块 ConfigParser 安装就不说了,pip一下即可,直接来个实例 配置文件 project.conf [db] host = ' ...
- tcpdump的使用以及参数详解
平时分析客户端和服务器网络交互的问题时,很多情况下需要在客户端和服务器抓包分析报文.一般win下抓包使用WireShark即可,但是linux下就需要用到tcpdump了,下面是一些对于tcpdump ...
- Nginx 主配置文件参数详解
Nginx 主配置文件参数详解 Nginx 安装完毕后,会有响应的安装目录,安装目录里 nginx.conf 为 nginx 的主配置文件, ginx 主配置文件分为 4 部分,main(全局配置). ...
- Nginx核心配置文件常用参数详解
Nginx核心配置文件常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于Nginx权威文档的话童鞋们可以参考Nginx官方文档介绍:http://nginx.org/ ...
- 【Python实战】模块和包导入详解(import)
1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...
随机推荐
- HTML5 CSS3 专题 :诱人的实例 3D展示商品信息
强化下perspective和transform:translateZ的用法.传统的商品展示或许并不能很好的吸引用户的注意力,但是如果在展示中添加适当的3D元素,~说不定效果不错哈~ 效果图: 说明一 ...
- fixed 和 absolute 定位的区别
fixed:固定定位 absolute:绝对定位 在没有滚动条的情况下两者其实没有差异.但是在有滚动条后,fixed始终会在定好的位置不动,而absolute会随参照对象元素的宽高 ...
- 如何解决testng执行用例失败自动重跑问题
注: 以下内容引自 http://blog.csdn.net/MenofGod/article/details/72846649 看过几个相关问题的帖子,内容类似,不过这篇解决问题的步骤和代码比较清晰 ...
- Windows 下python 环境安装
1.先在官网上下载安装包,官网地址: https://www.python.org 2. 选择自己需要的版本进行安装,最好选择新版本下载, 3. 下载完成后,双击运行安装,一直next,直至 ...
- 【bzoj 2303】【Apio2011】方格染色
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2303 题解: 很神奇的思路,膜一发大佬http://www.cnblogs.com/HHsh ...
- BZOJ_4636_蒟蒻的数列_线段树+动态开点
BZOJ_4636_蒟蒻的数列_线段树+动态开点 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将 ...
- BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心
BZOJ_1697_[Usaco2007 Feb]Cow Sorting牛排序_贪心 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行 ...
- linux学习之路(3)
vim编辑器使用 命令模式:控制光标移动,可对文本进行复制.粘贴.删除和查找等工作. 输入模式:正常的文本录入. 末行模式:保存或退出文档,以及设置编辑环境. vim中常用命令: dd 删除(剪切) ...
- appium 运行报错:...... Attempt to re-install io.appium.settings without first uninstalling解决方案
报错形式: Failed to install D:\AutoTest\appium\Appium\node_modules\appium\build\settings_apk\settings_ap ...
- Https协议与HttpClient的实现
一.背景 HTTP是一个传输内容有可读性的公开协议,客户端与服务器端的数据完全通过明文传输.在这个背景之下,整个依赖于Http协议的互联网数据都是透明的,这带来了很大的数据安全隐患.想要解决这个问题有 ...