ConfigParser是Python内置的一个读取配置文件的模块,用它来读取和修改配置文件非常方便,本文介绍一下它的基本用法。

数据准备

假设当前目录下有一个名为sys.conf的配置文件,其内容如下:

[db]
db_host=127.0.0.1
db_port=22
db_user=root
db_pass=root123 [concurrent]
thread = 10
processor = 20

注:配置文件中,各个配置项其实是用等号'='隔开的键值对,这个等号两边如果有空白符,在处理的时候都会被自动去掉。但是key之前不能存在空白符,否则会报错。

配置文件介绍

配置文件即conf文件,其文件结构多为键值对的文件结构,比如上面的sys.conf文件。

conf文件有2个层次结构,[]中的文本是section的名称,下面的键值对列表是item,代表每个配置项的键和值。

初始化ConfigParser实例

import ConfigParser
cf = ConfigParser.ConfigParser()
cf.read('./sys.conf')

读取所有的section列表

section即[]中的内容。

s = cf.sections()
print '【Output】'
print s
【Output】
['db', 'concurrent']

读取指定section下options key列表

options即某个section下的每个键值对的key.

opt = cf.options('concurrent')
print '【Output】'
print opt
【Output】
['thread', 'processor']

获取指定section下的键值对字典列表

items = cf.items('concurrent')
print '【Output】'
print items
【Output】
[('thread', '10'), ('processor', '20')]

按照指定数据类型读取配置值

cf对象有get()、getint()、getboolean()、getfloat()四种方法来读取不同数据类型的配置项的值。

db_host = cf.get('db','db_host')
db_port = cf.getint('db','db_port')
thread = cf.getint('concurrent','thread') print '【Output】'
print db_host,db_port,thread
【Output】
127.0.0.1 22 10

修改某个配置项的值

比如要修改一下数据库的密码,可以这样修改:

cf.set('db','db_pass','newpass')
# 修改完了要写入才能生效
with open('sys.conf','w') as f:
cf.write(f)

添加一个section

cf.add_section('log')
cf.set('log','name','mylog.log')
cf.set('log','num',100)
cf.set('log','size',10.55)
cf.set('log','auto_save',True)
cf.set('log','info','%(bar)s is %(baz)s!') # 同样的,要写入才能生效
with open('sys.conf','w') as f:
cf.write(f)

执行上面代码后,sys.conf文件多了一个section,内容如下:

[log]
name = mylog.log
num = 100
size = 10.55
auto_save = True
info = %(bar)s is %(baz)s!

移除某个section

cf.remove_section('log')

# 同样的,要写入才能生效
with open('sys.conf','w') as f:
cf.write(f)

移除某个option

cf.remove_option('db','db_pass')

# 同样的,要写入才能生效
with open('sys.conf','w') as f:
cf.write(f)

随机推荐

  1. edmx

  2. Vector类与Enumeration接口

    Vector类用于保存一组对象,由于java不支持动态数组,Vector可以用于实现跟动态数组差不多的功能.如果要将一组对象存放在某种数据结构中,但是不能确定对象的个数时,Vector是一个不错的选择 ...

  3. java web学习笔记-Servlet篇

    Servlet基础 1.Servlet概述 JSP的前身就是Servlet.Servlet就是在服务器端运行的一段小程序.一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问 ...

  4. noip模拟题题解集

    最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定 ...

  5. 时间戳(Unix时间)

    /// <summary> /// 时间戳与DateTime互转 /// </summary> public class UnixOfTimeHelper { /// < ...

  6. numpy 和 pandas 中常用的一些函数及其参数

    numpy中有一些常用的用来产生随机数的函数,randn()和rand()就属于这其中. numpy.random.randn(d0, d1, …, dn)是从标准正态分布中返回一个或多个样本值.  ...

  7. 在 App Store 三年學到的 13 件事(下)

    博文转载至 http://blog.csdn.net/iunion/article/details/18959801     Steven Shen,曾經寫過一本書,也翻過一本書,開發 iOS app ...

  8. STL中的容器

    STL中的容器 一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist ...

  9. 51NOD 1013(3的幂的和)

    题目链接:传送门 题目大意:求(3^0+3^1+3^2+3^3+...+3^n)%1e9的值 题目思路:乘法逆元裸题 #include <iostream> #include <cs ...

  10. IEnumerable 与 Iqueryable 的区别

    IEnumerable 和 IQueryable   共有两组 LINQ 标准查询运算符,一组在类型为 IEnumerable<T> 的对象上运行,另一组在类型为 IQueryable&l ...