【安装】
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. viewpager的使用-新方法 5.1

    效果图: 添加依赖包: compile ‘com.android.support:design:22.2.0‘ 布局文件: <?xml version="1.0" encod ...

  2. (WWWWWWWWWW)codevs 3305 水果姐逛水果街Ⅱ

    写这么长了不A有点舍不得.. 想A又调不出来.. 于是乎就存一下.. 屠龙宝刀点击就送 #include <cstdio> #include <vector> #define ...

  3. 中国剩余定理&Lucas定理&按位与——hdu 5446

    链接: hdu 5446 http://acm.hdu.edu.cn/showproblem.php?pid=5446 题意: 给你三个数$n, m, k$ 第二行是$k$个数,$p_1,p_2,p_ ...

  4. Maven归纳

      一.常用功能 1.Maven的中央仓库 https://mvnrepository.com/ 2.添加jar包依赖 1.首先点击pom.xml,然后点击弹出页面中的Dependencies选项,接 ...

  5. python基础一 day9 函数升阶(3)

    局部命名空间一般之间是独立,局部命名空间是调用函数时生成的函数的名字指向它所在的地址局部不会对全局产生影响,除非加global.# def max(a,b):# return a if a>b ...

  6. Delphi与JAVA互加解密AES算法

    搞了半天终于把这个对应的参数搞上了,话不多说,先干上代码: package com.bss.util; import java.io.UnsupportedEncodingException; imp ...

  7. github+hexo+themes搭建简易个性主题博客

    0x00  install Node.js and git 安装Node.js:http://www.runoob.com/nodejs/nodejs-install-setup.html 安装git ...

  8. easyui树节点拖拽排序的存储过程

    easyui树的拖拽排序功能 easyui树中有拖拽功能 树结构如下: 一个行政区域对应一个单位,一个单位对应多个部门,每个部门下有相关人员,功能要求: (1)行政区域没有子节点,点击text加载部门 ...

  9. shell脚本,如何监控目录下的文件内容是否被修改。

    第一种方法是通过cmp来进行比对[root@localhost bo]# ls .html .html .html .html .html .html .html .html .html cat.sh ...

  10. CSS规范(OOCSS SMACSS BEM)

    Css规范 OOCSS SMACSS BEM OOCSS(Object Oriented CSS)面向对象的css 主要分成四个部分 Template :模板 Grids :栅格布局 Module : ...