算是前几周落下的博客补一篇。介绍一下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读取配置文件的时候,也是非常简单的:

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

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

1 #读取所有sections:

2 secs = cfg.sections() #['SectionA', 'SectionB']

结果得到section的列表。

1 #读取某一个section里面的所有options

2 ops0 = cfg.options(secs[0]) #['a', 'b', 'c']

结果得到所有options的列表。

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

1 ops1 = cfg.items(secs[1])

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

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

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

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

1 print cfg.getint(secs[1], 'optionint') #1

2 print cfg.getfloat(secs[1], 'optionfloat') #1.1

3 print cfg.get(secs[1], 'optionstring') #string

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

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

1 cfg.add_section('SectionC') #添加section

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

或者删除配置:

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

之后

1 with open(filename, 'w') as fw:

2 cfg.write(fw)

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

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

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

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

python配置文件模块_Python解析配置文件模块:ConfigPhaser相关推荐

  1. python解析xml文件选用模块_python解析xml模块封装代码

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. python解析xml生成代码_python解析xml模块封装代码

    有如下的xml文件: 复制代码 代码如下: 1 2 下面介绍python解析xml文件的几种方法,使用python模块实现. 方式1,python模块实现自动遍历所有节点: 复制代码 代码如下: #! ...

  3. python的主要应用领域及常用的函数模块_python之常用模块篇5

    一.日志模块,logging模块 1)logging模块简单使用,屏幕输出.默认级别30 import logging logging.debug('debug...') # 10logging.in ...

  4. python必学的模块_Python常用的模块

    模块和包 1.1模块介绍模块定义:一系列功能的集合体 模块使用: import导入模块 或者 from ... import... 导入模块 模块分类:内置模块 自定义模块 第三方模块 模块加载顺序: ...

  5. python的窗口处理模块_python的图像处理模块

    除了opencv专门用来进行图像处理,可以进行像素级.特征级.语义级.应用级的图像处理外,python中还有其他库用来进行简单的图像处理,比如图像的读入和保存.滤波.直方图均衡等简单的操作,下面对这些 ...

  6. python写配置文件方法_Python读写配置文件的方法

    本文实例讲述了Python读写配置文件的方法.分享给大家供大家参考.具体分析如下: python 读写配置文件ConfigParser模块是python自带的读取配置文件的模块.通过他可以方便的读取配 ...

  7. python怎么导入os模块_python之os模块

    在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块,所以今天整理下比较常用 ...

  8. python中自带的模块_python中的模块详解

    概念 python中的模块是什么?简而言之,在python中,一个文件(以".py"为后缀名的文件)就叫做一个模块,每一个模块在python里都被看做是一个独立的文件.模块可以被项 ...

  9. 简述python中怎样导入模块_Python中导入模块的两种模式,import

    import import pandas import pandas as pd 使用函数方式:.(),或者.() 比如 pandas.read_csv("data/stock.csv&qu ...

  10. python安装os模块_python的os模块(ipython,文件,目录,权限,管理)

    什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件.目录打交道,这时就离不了o ...

最新文章

  1. mysql AB 的基本搭建
  2. mysql Tablespace exists解决
  3. POJ3041Asteroids(二分图最少顶点覆盖)
  4. 计算机信息加工的类型及举例,3.1.2计算机信息加工的过程和类型
  5. js分页工具分页功能实现
  6. [SNMP超详解]:简介、抓包分析与编程实战
  7. 数学建模入门篇(新手必看)
  8. 自然语言处理总复习(五)—— 词义消歧
  9. java取0到999整数_Java中输入一个0到999的整数 怎么弄? 谢谢了、
  10. matlab 轴系校中,轴系校中简介.ppt
  11. 清华 计算机系 赵晟,来看看2010年清华大学自动化系录取名单本科毕业学校
  12. 埃拉托色尼筛选法------筛选质数
  13. python搜狗微信搜索wechatsogou 用法
  14. 多项式在matlab中的应用,matlab的应用-多项式函数及多项式拟合
  15. 服务器发来的信息手机收不到,收不到QQ好友发来的信息
  16. CSMA/CD 协议
  17. 从表征到行动---意向性的自然主义进路(续一)
  18. mysql 查看并发数,mysql最大并发连接数的查看与修改()
  19. 访谈编码怎么做_【建模28】胜任力构建的技能——编码
  20. java 画笔_JAVA画笔(paint)的使用

热门文章

  1. Python Numpy中reshape函数参数-1的含义
  2. VDO-SLAM 配置 2022 Ubuntu20.04
  3. 想要配置文件生效 需要通过添加到web.xml加载到内存中
  4. javaee utf-8文件的转换
  5. 【Golang】如何不反序列化为前提的情况下,修改ProtoBuffer某个Tag的值
  6. 【Codeforces AIM Tech Round 4 (Div. 2) C】
  7. Android ViewPager滑动背景渐变
  8. hdu 4155 回溯
  9. 寒假CF1 C-龟龟
  10. Spring之Bean配置