设为首页 收藏本站
查看: 902|回复: 0

[经验分享] python模块之configparser

[复制链接]

尚未签到

发表于 2018-8-4 14:00:39 | 显示全部楼层 |阅读模式
configparser
  configParser 模块用于操作配置文件
  注:Parser汉译为“解析”之意。
  配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值或者键:值)。
  为了更好的理解本文,我们先了解一下配置文件的组成及命名:配置文件(INI文件)由节(section)、键、值组成。

样例配置文件config.ini
  

[book]  
title = ConfigParser模块教程
  
time = 2018-01-12 11:47:37
  

  
[size]
  
size = 1024
  

  
[other]
  
blog = http://blog.51cto.com/kexiaoke
  

  在config.ini里面出现了三个节(section),分别是book,size,other
  book里面有两个键值对,size和other里面各一个。

读取配置文件


  • read(filename) 直接读取ini文件内容
  • sections() 得到所有的section,并以列表的形式返回
  • options(section) 得到该section的所有option
  • items(section) 得到该section的所有键值对
  • get(section,option) 得到section中option的值,返回为string类型
  • getint(section,option) 得到section中option的值,返回为int类型
增加或修改配置


  • add_section(section) 添加一个新的section
  • set( section, option, value) 对section中的option进行设置  需要调用write将内容写入配置文件。

    获取config.ini配置示例

    read_config.py
  #!/usr/bin/env python

-- coding: utf-8 --
  

__author__ = 'xiaoke'  
__time__ = '2018-01-12 11:17'
  
PROJECT_NAME = 'test_projtcts'
  

  
#导入configparser模块
  
import configparser
  

  
#生成conf对象
  
conf= configparser.ConfigParser()
  

  
#加载config.ini文件内容
  
conf.read('config.ini')
  

  
#读取配置文件里所有的Section
  
print('读取配置文件里所有的Section')
  
print(conf.sections())
  

  
#打印出book这个section下包含key
  
print('打印出book这个section下包含key')
  
print(conf.options('book'))
  

  
#打印test1这个section下所有的key及对应的values
  
print('打印book这个section下所有的key及对应的values')
  
print(conf.items("book"))
  

  
#指定section,option读取值
  
print('获取book这section个title内容')
  
print(conf.get('book','title'))
  

执行结果如下
  

读取配置文件里所有的Section  
['book', 'size', 'other']
  
打印出book这个section下包含key
  
['title', 'time']
  
打印book这个section下所有的key及对应的values
  
[('title', 'ConfigParser模块教程'), ('time', '2018-01-12 11:47:37')]
  
获取book这section个title内容
  
ConfigParser模块教程
  

在config.ini文件增加一个section
  

#!/usr/bin/env python  
# -*- coding: utf-8 -*-
  
__author__ = 'xiaoke'
  
__time__ = '2018-01-12 13:54'
  
PROJECT_NAME = 'test_projtcts'
  

  
#导入configparser模块
  
import configparser
  

  
#生成conf对象
  
conf= configparser.ConfigParser()
  

  
#加载config.ini文件内容
  
conf.read('config.ini')
  

  
#增加一个section
  
conf.add_section('add_test')
  
conf.set('add_test','name','xiaoke')
  
conf.set('add_test','age','25')
  

  
#添加完毕,必须调用write方法写入
  
conf.write(open('config.ini','w'))
  

  
#打印刚添加的内容
  
print(conf.items('add_test'))
  

执行完成后会在配置文件如下的内容
  conf.set('section','key','value')
  

[add_test]  
name = xiaoke
  
age = 25
  

修改section的内容
  

#导入configparser模块  
import configparser
  

  
#生成conf对象
  
conf= configparser.ConfigParser()
  

  
#加载config.ini文件内容
  
conf.read('config.ini')
  

  
#打印修改之前的值
  
print(conf.items('add_test'))
  

  
#修改add_test section的age键
  
conf.set('add_test','age','27')
  

  
#修改完毕,必须调用write方法写入
  
conf.write(open('config.ini','w'))
  

  
#打印修改之后的值
  
print(conf.items('add_test'))
  

------------------------结果如下-----------------
  修改之前的值
  [('name', 'xiaoke'), ('age', '28')]
  修改之后的值
  [('name', 'xiaoke'), ('age', '27')]

删除section或者option

删除section
  

config.remove_section("add_test")  
conf.write(open('config.ini','w'))
  

删除option
  

conf.remove_option('add_test','age')  
conf.write(open('config.ini','w'))
  

注意要点
  注意要点:
  1.ConfigParser 在get 时会自动过滤掉‘#’或‘;’注释的行(内容);
  一般情况下我们手工会把配置中的暂时不需要的用‘#’注释,问题在于,Configparser 在wirte的时候同file object行为一致,如果将注释’#’的配置经过get后,再wirte到conf,那么’#’的配置就会丢失。
  那么就需要一个策略或规则,配置需不需要手工编辑 ?还是建立复杂的对原生文本的处理的东西,我建议是管住手,避免将一些重要的配置爆露给用户编辑,切记行内注释和Section内注释。
  有一个相对简单的方法是: 对单独在一行的代码,你可以在读入前把”#”, “;”换成其他字符如’@’,或‘^’(在其bat等其他语言中用的注释符易于理解),使用allow_no_value选项,这样注释会被当成配置保存下来,处理后你再把“#”, “;”换回来。
  2.在ConfigParser write之后,配置文本如果有大写字母’PRODUCT’会变为小写字母’product’,并不影响配置的正确读写。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-546551-1-1.html 上篇帖子: Python 用HTMLParser解析HTML文件 下篇帖子: 【13】Python之常用文件操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表