【安装】
ConfigParser 是解析配置文件的第三方库,需要安装 pip install ConfigParser
 
【介绍】
ConfigParser 是用来读取配置文件(可以是.conf, .txt, .init 等格式)的包。
配置文件的格式如下:中括号“[ ]”内包含的为section。 section 下面为为option, 类似于key-value 的配置内容。
如下,[ ]内包含的 db 和 concurrent 为 section, db_host 等为option
 
[db]
db_host = 127.0.0.1
db_port = 22
db_user = root
db_pass = rootroot
 
[concurrent]
thread = 10
processor = 20
 
注意: key = value 和 key:value 两种形式都可以
 
【常见函数】
-read(filename) 直接读取配置文件内容
-sections() 得到所有的section,并以列表的形式返回
-options(section) 得到该section的所有option
-items(section) 得到该section的所有键值对
-get(section,option) 得到section中option的值,返回为string类型
-getint(section,option) 得到section中option的值,返回为int类型,还有相应的getboolean()和getfloat() 函数。
 
【用法】
1. ConfigParser 初始工作
使用ConfigParser 首选需要初始化实例,并读取配置文件:
import ConfigParser
cf = ConfigParser.ConfigParser()
cf.read("配置文件名")
 
2. 获取所有sections。也就是将配置文件中所有“[ ]”读取到列表中:
s = cf.sections()
print 'section:', s
 
将输出(以下将均以简介中配置文件为例):section: ['db', 'concurrent']
 
3. 获取指定section 的options。即将配置文件某个section 内key 读取到列表中:
o = cf.options("db")
print 'options:', o
将输出:
options: ['db_host', 'db_port', 'db_user', 'db_pass']
 
4. 获取指定section 的所有配置信息。返回列表,列表的元素是key,value 组成的元组。 (用起来不方便)
v = cf.items("db")
print 'db:', v
将输出:
db: [('db_host', '127.0.0.1'), ('db_port', '22'), ('db_user', 'root'), ('db_pass', 'rootroot')]
 
5. 按照类型读取指定section 的option 信息。同样的还有getint、getfloat、getboolean。
#可以通过get(section,option)
db_host = cf.get("db", "db_host")
db_port = cf.getint("db", "db_port")
db_user = cf.get("db", "db_user")
db_pass = cf.get("db", "db_pass")
 
# 按照类型读取出来
threads = cf.getint("concurrent", "thread")
processors = cf.getint("concurrent", "processor") print "db_host:", db_host
print "db_port:", db_port
print "db_user:", db_user
print "db_pass:", db_pass
print "thread:", threads
print "processor:", processors
将输出:
db_host: 127.0.0.1
db_port: 22
db_user: root
db_pass: rootroot
thread: 10
processor: 20
 
注: 当查找不到指定的 section 或者 option 时,会抛出异常:
raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'dbs'
 
raise NoOptionError(option, section)
ConfigParser.NoOptionError: No option 'db_hosts' in section: 'db'
 
所以,在用 get(section,option) (getint,getfloat,getboolean 同) 时:
a. 要么包含在try...except 语句中,主动捕获异常
b. 要么先判断是否有该指定的 section 或 option:
if parser.has_section('section'): #判断 section 是否存在
dosomething
 
if parser.has_option('section','option'): #判断 option 是否存在
dosomething
 
6. 设置默认值 DEFAULT
如果配置文件中存在一个名为 DEFAULT (只能全部大写) 的 section,那么其他 section 会扩展它的 option 并且可以覆盖它的 option
 
[DEFAULT]
host = 127.0.0.1
port = 3306 [db_root]
user = root
pass = root
 
 
[db_huey]
host = 192.168.1.101
user = huey
pass = huey
 
print cp.get('db_root', 'host') # 127.0.0.1 print cp.get('db_huey', 'host') # 192.168.1.101
 
注意:当查询所有 sections 时, 显示只有两个, 即没有 DEFAULT 这个section
查询 section 里的options 时, 则多显示了两个, 即每个section 都会扩张 DEFAULT的 options
如 print parser.options('db_root')
则输出为 ['user ','pass','host','port']
 
=========================================================================================
封装成以字典返回的函数:
def configParser(config_file):
  parser = ConfigParser.ConfigParser()
  parser.read(config_file)
  config = {}
  for session in parser.sections(): #循环解析每一个section
    sessionValue = {} #把每一个section下对应的所有配置都存放到一个字典里
    for option in parser.options(session): #循环解析每一个section下的每一个option
      sessionValue[option] = parser.get(session, option).strip()
    config[session] = sessionValue #最后把所有的section(字典)再存放到一个大的字典里
  return config
print configParser('../config.txt')
print configParser('../config.txt').get('db').get('db_host')
 
输出:
{
'concurrent': {'processor': '20', 'thread': '10'},
'db': {'db_pass': 'rootroot', 'db_user': 'root', 'db_host': '127.0.0.1', 'db_port': '22'}
}
127.0.0.1
 

python ConfigParser 学习的更多相关文章

  1. 【目录】Python模块学习系列

    目录:Python模块学习笔记 1.Python模块学习 - Paramiko  - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...

  2. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  3. 60分钟Python快速学习(给发哥一个交代)

    60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空 ...

  4. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

  5. python爬虫学习 —— 总目录

    开篇 作为一个C党,接触python之后学习了爬虫. 和AC算法题的快感类似,从网络上爬取各种数据也很有意思. 准备写一系列文章,整理一下学习历程,也给后来者提供一点便利. 我是目录 听说你叫爬虫 - ...

  6. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

  7. python 线程学习

    彩照 一.学习[1] # -*- coding: utf-8 -*- import time import thread def timer(no, interval): cnt = 0 while ...

  8. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  9. !!对python列表学习整理列表及数组详细介绍

    1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...

随机推荐

  1. 跨平台C++开源代码的两种常用编译方式

    作者:朱金灿 来源:http://blog.csdn.net/clever101 跨平台C++开源代码为适应各种编译器的编译,采用了两种方式方面来适配.一种是makefile方式.以著名的空间数据格式 ...

  2. Objective-C Composite Objects

    We can create subclass within a class cluster that defines a class that embeds within it an object. ...

  3. UVM之uvm_phase

    UVM中的phase机制很有意思,它能让UVM启动之后,自动执行所有的流程.UVM 的user guide 中对uvm_phase的定义如下: This base class defines ever ...

  4. 利用UnblockNeteaseMusic实现网易云破版权,并实现shell可快速访问

    注:本篇包含mac及windows下安装方式详细 mac安装 前提:安装有node环境,可参考 mac下安装nodejs 安装 下载git代码到本地 git clone https://github. ...

  5. IOS之网络状态设和NSUserDefaults的synchronize

    #pragma mark - check net status int apiCheckNetStatus() { Reachability *reachNet = [Reachability rea ...

  6. Android学习总结(十七) ———— Handler 的使用

    一.基本概念  handler通俗一点讲就是用来在各个线程之间发送数据的处理对象.在任何线程中,只要获得了另一个线程的handler,则可以通过  handler.sendMessage(messag ...

  7. How to install Eclipse?

    http://askubuntu.com/questions/26632/how-to-install-eclipse How to install Eclipse? up vote113down v ...

  8. Windows64+Python27下配置matplotlib

    注:转载请注明原作者并附上原文链接! 网上看了很多方法,均遇到这样或者那样的问题导致安装失败,最后自己摸索一条方法,最终安装成功了. 1,首先安装numpy,这个可以选择install安装包,很简单, ...

  9. vijos 1190 繁忙的都市

    描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路 ...

  10. js 双向绑定

    //双向绑定实例 <input name="" ng-bind-123="name" /> function DataBinder( object_ ...