$用ConfigParser模块读写conf配置文件

时间:2023-03-09 17:20:38
$用ConfigParser模块读写conf配置文件

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. CTO俱乐部

    主持人:目前互联网金融行业存在哪些行业痛点?云信CreditCloud 是如何解决这些痛点的,过程中有哪些思考? 朱家波:目前这个行业有点乱象丛生, 投资人对行业的不信任是一个很大的痛点.解决不信任的 ...

  2. Apollo 刨析:Localization

    九月 30 2014 11:27 上午     admin 0 Comments 今天我们来看一看Apollo中的Localization Component. 本地化在Apollo中的使用 像这样的 ...

  3. 隐式意图调用系统自带组件的各种Uri总结

    调用系统应用解析(必需要加各自使用的权限)  android intent 隐式意图和显示意图(activity跳转) 显示意图要求必须知道被激活组件的包和class 隐式意图仅仅须要知道跳转acti ...

  4. 用python解析html--SGMLParser

    sgmllib.py 包含一个重要的类: SGMLParser.SGMLParser 将 HTML 分解成有用的片段, 比如开始标记和结束标记.一旦它成功地分解出某个数据为一个有用的片段,它会根据 所 ...

  5. 关于 HTML5 的文件上传处理,兼容性问题,以及 BLOB 对象的使用 (转载)

    研究过程中关于本主体的相关参考 好文:https://hacks.mozilla.org/2011/01/how-to-develop-a-html5-image-uploader/ 好文:http: ...

  6. ObjC利用正则表达式抓取网页内容(网络爬虫)

    本文转载至 http://www.cocoachina.com/bbs/read.php?tid=103813&fpage=63 在开发项目的过程,很多情况下我们需要利用互联网上的一些数据,在 ...

  7. cxGrid 使用指南 1

    1:cxgrid是应该数据关联的控件,类似dbgrid.2:一般用来查阅表信息,如果要修改的话,直接在上面编辑或添加 非常不方便通常要放几个EDit来对选中的记录进行编辑或添加记录. 因为表一般都有主 ...

  8. JavaWeb项目中文乱码问题

    1.从浏览器读数据乱码(post 请求方式) 前提是前端页面是UTF-8编码,因为服务器端默认采用ISO解码,所以乱码,在读取前加上: request.setCharacterEncoding(&qu ...

  9. HYSBZ 2565 最长双回文串 (回文树)

    2565: 最长双回文串 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1377  Solved: 714 [Submit][Status][Dis ...

  10. Go & SQLite on Windows

    一般golang使用的sqlite驱动包都是github.com/mattn/go-sqlite3,但是官方并没有直接支持windows平台的编译,因为windows平台编译默认需要gcc支持 其实解 ...