$用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)
随机推荐
- MFC绘图相关GDI工具对象和函数介绍
在利用MFC进行界面编程时,除了需要熟悉各种类型控件的操作外,还会经常遇到图形绘制和显示的问题,比如时频分析界面.图像处理界面等.处理这些软件界面开发问题时,不可避免地需要用到一系列GDI工具对象和相 ...
- C# 路径的使用
// 摘要: // 获取或设置包含该应用程序的目录的名称. // // 返回结果: // 应用程序基目录的名称. AppDomain.CurrentDomain.SetupInformation.Ap ...
- 将socket5代理转换为http代理
归根结底还是万恶的ZFW,MD弄得现在Google,gmail,dropbox都用不了了,看来这是要万民欢迎大中华局域网的到来了.最近在使用一同学的Shadowsocks来突破GFW的限制,可是电脑o ...
- CodeFirst中DbContext动态添加DbSet
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- logback配置每天生成一个日志文件,保存30天的日志文件
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 文件输出格 ...
- Java中匿名内部类
匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象 ...
- iOS 去掉navgationbar 底部线条
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent]; [[UINavigationBar appearance] ...
- mybatis的oracle的in超过1000的写法
<if test="preIds != null and preIds.size() > 0"> AND PRE_ID IN <trim suffixOve ...
- JRE not compatible with workspace .class file compatibility: 1.7
在进行Eclipse开发的时候,经常会遇到一些小问题,现在开始每天积累一些小问题的解决方法.出现:JRE not compatible with workspace .class file compa ...
- [hihoCoder] KMP算法
Each time we find a match, increase the global counter by 1. For KMP, algorithm, you may refer to th ...