给大家介绍下两个库哈,ConfigParser和yaml ,这俩主要是实现配置文件解析的。
前沿:
这段时间同事做项目,我发现有一些个全局配置或者平台的主配置文件,都是写在一个模块里面的。 这也太不专业和太专业了。。。 不专业在与,python有很多这样的配置文件解析的模块。 太专业在于,每次改全局配置都要在xxx.py修改。。。给人的感觉不爽。。。
我一般是咋用的:
脚本的配置变量的解析修改 ! 说的通俗点,我跑一个脚本,不用在脚本的后面加上一堆的参数,可以直接在配置文件里修改线程数目, 绑定的ip地址这些个常量。。。 我有的时候,需要两个独立进程的变量交互,也可以用yaml,当然这个方法有点搓,但也是一种好实现的方法。。。。
先说yaml~
现在好多的配置文件也都在用这个,比如牛逼的saltsatck 集群配置用的就是yaml !!!
YAML是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互。YAML类似于XML,但是语法比XML简单得多,对于转化成数组或可以hash的数据时是很简单有效的。
YAML 简述
YAML的可读性好。
YAML和脚本语言的交互性好。
YAML使用实现语言的数据类型。
YAML有一个一致的信息模型。
YAML易于实现。
YAML可以基于流来处理;
YAML表达能力强,扩展性好。
YAML语法简单 Structure通过空格来展示,Sequence里的项用"-"来代表,Map里的键值对用":"分隔。
目前现有的语言实现广泛:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其他都是脚本语言
介绍完yaml~ 咱们开始搞起
第一步安装
yaml的配置文件 ~
1
2
3
4
5
6
7
8
9
10
11
12
|
name: xiaorui
age:
18
spouse:
name: mm
age:
25
sb:
-
name: shencan
age:
11
-
name1: dehua
age1:
12
-
name2: qiaofeng
age1:
13
|
关于yaml的执行文件 ~
open是打开一个配置文件,load是加载这个配置文件
1
2
3
4
5
|
#coding:utf-8
import
yaml
f
=
open
(
'kk.yaml'
)
x
=
yaml.load(f)
print
x
|
我们再继续的拆分,其实大家都懂的。。。
配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser !!!
咱们常见的ini配置文件就可以用 configparser !!!
安装 configparser 模块
configparser的配置文件
python.py ~
1.基本的读取配置文件
-read(filename) 直接读取ini文件内容
-sections() 得到所有的section,并以列表的形式返回
-options(section) 得到该section的所有option
-items(section) 得到该section的所有键值对
-get(section,option) 得到section中option的值,返回为string类型
-getint(section,option) 得到section中option的值,返回为int类型,还有相应的getboolean()和getfloat() 函数。
2.基本的写入配置文件
-add_section(section) 添加一个新的section
-set( section, option, value) 对section中的option进行设置,需要调用write将内容写入配置文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#coding:utf-
8
import
ConfigParser
cf = ConfigParser.ConfigParser()
#read config
cf.read(
"test.conf"
)
#
return
all section
secs = cf.sections()
print
'sections:'
, secs
opts = cf.options(
"db"
)
print
'options:'
, opts
kvs = cf.items(
"gg"
)
print
'sec_a:'
, kvs
#read by type
str_val = cf.
get
(
"db"
,
"db_host"
)
print
"value for sec_a's a_key1:"
, str_val
#write config
#update value
#我这里要更新的
cf.
set
(
"db"
,
"db_host"
,
"10.10.10.1"
)
#我这里新增加的一条
#
set
a
new
value
cf.
set
(
"db"
,
"weburl"
,
"xiaorui.cc"
)
#create a
new
section
#我这里新加的一个段落
cf.add_section(
'new-duanluo'
)
cf.
set
(
'a_new_section'
,
'new_key'
,
'new_value'
)
#write back to configure file
cf.write(open(
"test.conf"
,
"w"
))
|
要是觉得复杂,可以看看这个小例子:
conf文件
1
2
3
4
5
6
7
8
|
[DB]
host=
127.0
.
0.1
name=mydb
user=root
pwd=testpwd
[TH]
thread=
5
timeout=
30
|
python文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#coding=utf-
8
import
ConfigParser
cf = ConfigParser.ConfigParser()
cf.read(
'conf.ini'
) #另个方法是cf.readfp(fp) fp是已打开的文件对象
# 列出所有sections
sec = cf.sections()
print sec
#列出[TB]下的options
pos = cf.options(
"TH"
)
print pos
#直接读取配置值
print cf.
get
(
"DB"
,
"host"
) #不要与字典的
get
()混淆哦
print cf.
get
(
"DB"
,
"name"
)
print cf.
get
(
"DB"
,
"user"
)
print cf.
get
(
"DB"
,
"pwd"
)
print cf.getint(
"TH"
,
"thread"
) #getint()返回的是整型
print cf.getint(
"TH"
,
"timeout"
)
|
看到结果了吧。。。 改变了值和新增了一个段落 !
本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1314362,如需转载请自行联系原作者