算是前几周落下的博客补一篇。介绍一下python中如何解析配置文件。配置文件常用的几种格式:xml,json,还有ini。其中ini算是最简单的一种格式,因为小,解析的速度也要比xml和json快(并没有科学的数据支撑,只是我个人想法)。当然,我并不是说xml和json不好,只是有时候只想在文件里写点配置的话,还是ini比较小巧。好了废话不多说,来讲解一下python中处理ini配置文件的类ConfigPhaser。

一般来讲,一个ini配置文件里,格式是酱婶的:

[SectionA]   # 方括号里叫做一个section
a = aa # 这里的每一行,等号左侧是一个option,右侧是option的value
b = bb
c = cc [SectionB]
optionint = 1
optionfloat = 1.1
optionstring = string

就这么简单(配置文件是没有注释的,不要乱写,否则读的时候会出错。xml和json也一样)。

用python读取配置文件的时候,也是非常简单的:

 with open(filename, 'r') as fr:
cfg = ConfigParser.ConfigParser()
cfg.readfp(fr)

这就读好了。下面的工作就是解析cfg。

 # 读取所有sections:
secs = cfg.sections() # ['SectionA', 'SectionB']

结果得到section的列表。

 # 读取某一个section里面的所有options
ops0 = cfg.options(secs[0]) # ['a', 'b', 'c']

结果得到所有options的列表。

可是解析配置文件的目的并不是获得option,而是获得option和value的键值对呀!——直接使用items就好了:

 ops1 = cfg.items(secs[1])

猜猜print ops1的时候会获得什么?嗯,是的,你猜错了。并不是一个字典,而是一个列表:

[('optionint', '1'), ('optionfloat', '1.1'), ('optionstring', 'string')]

希望把它当做字典来用的话,需要dict(ops1)

当我只想获得某一个option的值怎么办呢?不想一下子读那么多数据的话,可以用一系列get的方法:

 print cfg.getint(secs[1], 'optionint')  #
print cfg.getfloat(secs[1], 'optionfloat') # 1.1
print cfg.get(secs[1], 'optionstring') # string

其实在类的内部实现中,getint和getfloat也只是在get上又封装了一层。

这就是ConfigPhaser模块的简单用法。然而这个模块并不只是能简单的读取配置文件,还可以动态的添加内容哟~酱婶的:

 cfg.add_section('SectionC')             # 添加section
cfg.set('SectionC', 'ex', 'example') # 添加option及value

或者删除配置:

 cfg.remove_option('SectionC', 'ex')
cfg.remove_section('SectionC')

之后

 with open(filename, 'w') as fw:
cfg.write(fw)

这样就把配置写回到配置文件里去了。要注意的是,读取配置文件和写配置文件最好分别进行,不要一个文件既读又写。首先,cfg读取的时候用read,这就要求文件一定要用r/r+/a的方式读才行,但是r不能写,r+和a只能在结尾追加,这样cfg在用write写文件的时候,就会把原来的配置再写到配置文件里去,而不是覆盖方式。

大概就酱。so easy吧。不敢说完全弄清楚了这个配置文件类,但是基本用法这些大概就够用了。

PS:配置文件的名字,可以不用ini做后缀。随便什么都行,你高兴就好。

2016.03.07更新:有同学反映ConfigPhaser不支持多线程读写。感觉多线程读肯定没问题,至于写,本身写文件就是一件需要很仔细的事,尽量还是不要多线程的好。只是,如果控制好同步,应该也可以的吧。谁有空的时候可以测试一下,我是不太想研究这个了。本来就是一个不愿意踩坑的人,明知是雷区就应该尽量绕过去而不是蹚过去不是吗?

Python解析配置文件模块:ConfigPhaser的更多相关文章

  1. python解析xml模块封装代码

    在python中解析xml文件的模块用法,以及对模块封装的方法.原文转自:http://www.jbxue.com/article/16586.html 有如下的xml文件:<?xml vers ...

  2. Python之配置文件模块 ConfigParser

    写项目肯定用的到配置文件,这次学习一下python中的配置文件模块 ConfigParser 安装就不说了,pip一下即可,直接来个实例 配置文件 project.conf [db] host = ' ...

  3. python模块之ConfigParser: 用python解析配置文件

    在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,这里简单的做一些介 ...

  4. Python 模块之 ConfigParser: 用 Python 解析配置文件

    在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在 Python 里更是如此,在官方发布的库中就包含有做这件事情的库,那就是 ConfigParser,这里简单的做 ...

  5. Python 解析配置模块之ConfigParser详解-乾颐堂

    1.基本的读取配置文件 -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以列表的形式返回 -options(section) 得到该sect ...

  6. Python读写配置文件模块--Configobj

    一.介绍 我们在项目的开发过程中应该会遇到这样的问题:我们的项目读取某个配置文件,然后才能按照配置的信息正常运行服务,当我们需要对修改服务的某些信息时,可以直接修改这个配置文件,重启服务即可,不用再去 ...

  7. python 解析 配置文件

    资料: https://docs.python.org/3/library/configparser.html 环境 python 3.4.4 RawConfigParser方式 example.cf ...

  8. python 解析配置文件

    settings.cfg [english] greeting = Hello [french] greeting = Bonjour [files] home = /usr/local bin = ...

  9. python中configpraser模块

    configparser   模块 解析配置文件模块 什么是配置文件? 用于编写程序的配置信息的文件 什么是配置信息? 为了提高程序的扩展性 #configparser模块的使用 #首先我们需要知道配 ...

随机推荐

  1. 使用idea开发工具,nginx服务部署Extjs6,SpringBoot项目到服务器

    编译ExtJs文件 1.输入命令 2.开始编译 3.找到编译后的文件 E:\idea_project\BaiSheng_Model\fin-ui\build\production\Admin 4.将文 ...

  2. svn update 报错,必须先cleanup,然后cleanup失败解决方法

    一 问题描述: 1.svn update失败,提示已被locked,请执行cleanup 2.执行svn cleanup,提示cleanup failed to process the followi ...

  3. PostgreSQL On Windows Process Connection Performance

    本文主要对PostgreSql在Windows下的连接测试. 测试环境: Win7 x64, PostgreSql 10.1 x64 测试语言: VS2015 C# 因为Pg的数据库连接是开启进程来处 ...

  4. awk如何替换一个字符串的第n个字符?

    方法一: echo "abcdefg" | awk 'BEGIN{FS=OFS=""}$4="h"'    // ""可 ...

  5. 如何移除git不需要提交的文件

    在大公司提交代码都需要经历cr(code review)过程,在用python脚本将代码上传至cr(代码对比工具)服务器时会产生一个issue.info文件,这个文件的内容就是一个issue号,此文件 ...

  6. Java基础(九)多线程

    一.线程和进程 进程(Process): 1.是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 2.在早期面向进程设计的计算机结构中,进程是程 ...

  7. Tomcat服务器配置和使用(三)

    https连接器 明白了互联网上的加密原理之后,下面来看看浏览器与服务器交互时,浏览器想将数据加密后再发送给服务器,那么该怎么做呢?服务器首先要向浏览器出示一份数字证书,浏览器看到数字证书后,就可以使 ...

  8. 通过mysql自动同步redis

    在服务端开发过程中,一般会使用MySQL等关系型数据库作为最终的存储引擎,Redis其实也可以作为一种键值对型的数据库,但在一些实际场景中,特别是关系型结构并不适合使用Redis直接作为数据库.这俩家 ...

  9. python简单的爬虫

    def baidu_tieba(url,begin_page,end_page): for i in range(begin_page, end_page+1): sName = string.zfi ...

  10. BZOJ4698: Sdoi2008 Sandy的卡片(二分 hash)

    题意 题目链接 Sol 用什么后缀数组啊 直接差分之后 二分+hash找最长公共子串就赢了啊... 时间复杂度:\(O(nlogn)\)(不过我写的是两个log..反正也能过) // luogu-ju ...