在python中实现自定义配置文件解析及应用技巧[yaml and ConfigPa
在python中实现自定义配置文件解析及应用技巧[yaml and ConfigParser]
给大家介绍下两个库哈,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的配置文件 ~
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是加载这个配置文件
#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将内容写入配置文件。
#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文件[DB]
host=127.0.0.1
name=mydb
user=root
pwd=testpwd
[TH]
thread=5
timeout=30
python文件#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")
看到结果了吧。。。 改变了值和新增了一个段落 !
转载于:https://blog.51cto.com/rfyiamcool/1314362
在python中实现自定义配置文件解析及应用技巧[yaml and ConfigPa相关教程
redis数据库事务处理及hash,list,set类型的python开发应用
redis数据库事务处理及hash,list,set类型的python开发应用 随着这段时间做项目,又拾起来redis这个nosql利器。。。 以前redis用的最多方面是string的kv存储,队列和mq通信。这段时间重新系统的学习了redis。 关于redis hash哈希的解释:(很官方) redis hash
使用python构建基于hadoop的mapreduce日志分析平台
使用python构建基于hadoop的mapreduce日志分析平台 流量比较大的日志要是直接写入Hadoop对Namenode负载过大,所以入库前合并,可以把各个节点的日志凑并成一个文件写入HDFS。 根据情况定期合成,写入到hdfs里面。 咱们看看日志的大小,200G的dns日志文件,我
利用pypy提高python脚本的执行速度及测试性能
利用pypy提高python脚本的执行速度及测试性能 啥是pypy 简单地说, PyPy 是用 Python 语言写了一个工具, 将 Python 代码成 C, .NET, Java 等语言和平台的代码. PHP 也有类似的项目 – HipHop-PHP, 把 PHP 代码转成 C++ 代码. 为什么要将一种语言转成另一种语
基于gevent和pymysql实现mysql读写的异步非堵塞方案
基于gevent和pymysql实现mysql读写的异步非堵塞方案 咱们经常使用的mysql库, MySQL-Python 库是用C写的,很遗憾它是阻塞的,要实现异步的MySQL驱动必须用 Python 版本的MySQL驱动! 现在社区里面有两个纯python实现的mysql驱动。一个是 myconnpy 另一个是Py
服务端socket开发之多线程和gevent框架并发测试[python语言]
服务端socket开发之多线程和gevent框架并发测试[python语言] 请多关注下我的个人博客,blog.xiaorui.cc 测试下多线程和gevent在socket服务端的小包表现能力,测试的方法不太严谨, 有点属于 自娱自乐 ,要是有问题之处,请大家喷之 ! 每个连接都特意堵塞了0
通过memcached实现领号排队功能及python队列实例
通过memcached实现领号排队功能及python队列实例 前言: 前段时间写的那个域用户平台,要做大量的新功能运维测试,据说要抄IT组,让那帮人到搞,跑一下 ! 尼玛,这可吓坏了我了。 因为平台要和windows做大量的交互,那边 powershell 又很不给力,改成多线程
配置gitlab环境实现代码管理及Web Hook测试和ldap认证
配置gitlab环境实现代码管理及Web Hook测试和ldap认证 前沿: 对于代码库感触有点多,用过redmine(差点忘了名字),还有就是gitweb,最后就是gitlab 。 gitlab是我用的很舒服的东西,在2012就接触了,当时开发水平见不得人,主要上传的还是常用安装配置脚本
基于python的REST框架eve测试与mongodb的数据操作
基于python的REST框架eve测试与mongodb的数据操作 Eve是一款Python的REST API框架,用于构建和部署高可定制的、全功能的RESTful的Web服务。Eve是一个开源项目,遵循BSD开源协议,已在Python 2.6、2.7以及Python 3.3版本下进行了非常全面的测试。 特色 强调RES