为了账号安全,请及时绑定邮箱和手机立即绑定

在python中实现自定义配置文件解析及应用技巧

标签:
Python


给大家介绍下两个库哈,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~ 咱们开始搞起

第一步安装

094327366.png

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

094444553.png

我们再继续的拆分,其实大家都懂的。。。

095219917.png

配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser !!!

咱们常见的ini配置文件就可以用 configparser !!!

安装 configparser 模块

103345149.png

configparser的配置文件

103357451.png

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"))

103908462.png

要是觉得复杂,可以看看这个小例子:

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")

看到结果了吧。。。 改变了值和新增了一个段落 !

©著作权归作者所有:来自51CTO博客作者rfyiamcool的原创作品,谢绝转载,否则将追究法律责任

python yamlpython configparserpython 全局配置python应用


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消