读取配置文件和自定义配置文件(python实现)

转载 2012年03月25日 20:59:38

用python读取配置文件比较方便,比如下面一个配置文件:


0.ini文件:
---------------文件开始----------------
[global]
ip = 192.168.1.100 ;ip地址
port = 1234
MAC = 0x414243444546;mac
---------------文件结束----------------
要从中读取ip地址我们可以用如下代码:

1 #! /usr/bin/python
2 #-*- coding: utf-8 -*-
3 import ConfigParser
4
5 config = ConfigParser.ConfigParser()
6 config.readfp(open(raw_input("Input file name : "),"rb"))
7
8 print config.get("global","ip")

 

运行结果:
>>> 
Input file name : 0.ini
192.168.1.100

如果把最后一行换成:print config.get("global","MAC")
运行结果:
>>> 
Input file name : 0.ini
0x414243444546;mac


然而读取的数据不是我预期的(主要是ini文件写法有误),再看下面我自己定义的配置文件:

1.ini文件:
---------------文件开始----------------

# 配置文件

<part1> 
[global] #全局配置参数
ip = 192.168.1.100
port = 1234 
MAC = 0x414243444546# MAC地址


<part2> 
[global] #全局配置参数
ip = 192.168.1.101
port = 1234 
MAC = 0x414243444547 # MAC地址

---------------文件结束----------------

对于扩展的配置文件格式,上述代码不能解析。默认的配置有时候局限太大,用起来不太方便。
我们可以借助python的dict数据结构完成配置文件的解析,使用起来也很方便。
下面是个示例,可以读取上述扩展的配置文件。


读取代码示例:

 1 #! /usr/bin/python
2 #-*- coding: utf-8 -*-
3
4 partLable = ("<",">")
5 sectionLable = ("[","]")
6 endlineLable = "\r\n" # windows下的行标志
7 #endlineLable = "\n" # linux下的行标志
8 equalLable = "=" # 赋值标志
9 noteLable = '#' # 注释标志
10
11 # 得到总配置的map
12 def getPlatformMap(strtmp,lable1 = partLable,lable2 = sectionLable):
13 tmp = strtmp.split(lable1[0])
14 tmp = [elem for elem in tmp if len(elem) > 1]
15 tmp = [elem for elem in tmp if elem.rfind(lable1[1]) > 0]
16 platdict = {}
17 for elem in tmp:
18 key = elem[0:elem.find(lable1[1]):]
19 value = elem[elem.find(lable2[0])::]
20 platdict[key] = value
21 return platdict
22
23 # 得到各部分的map
24 def getSectionMap(strtmp,lable1 = sectionLable):
25 tmp = strtmp.split(lable1[0])
26 tmp = [elem for elem in tmp if len(elem) > 1]
27 tmp = [elem for elem in tmp if elem.rfind(lable1[1]) > 0]
28 sectionDict = {}
29 for elem in tmp:
30 key = elem[0:elem.find(lable1[1]):]
31 value = elem[elem.find(endlineLable)+len(endlineLable)::]
32 sectionDict[key] = value
33 return sectionDict
34
35 # 获取具体配置值
36 def getValueMap(strtmp):
37 tmp = strtmp.split(endlineLable)
38 tmp = [elem for elem in tmp if len(elem) > 1]
39 valueDict = {}
40 for elem in tmp:
41 if elem.find(noteLable) > 0: # 如果有注释则去掉注释
42 elem = elem[0:elem.find(noteLable):]
43 elem = ''.join(elem.split()) # 去掉空白字符
44 key = elem[0:elem.find(equalLable):]
45 value = elem[elem.find(equalLable)+len(equalLable)::]
46 valueDict[key] = value
47 return valueDict
48
49 f = open(raw_input("Input file name : "),"rb")
50 strFileContent = f.read()
51 f.close()
52 vardict = {}
53
54 var1 = getPlatformMap(strFileContent)
55
56 for k,v in var1.items():
57 var2 = getSectionMap(v)
58 dict3 = {}
59 for k2,v2 in var2.items():
60 var3 = getValueMap(v2)
61 dict3[k2] = var3
62 vardict[k] = dict3
63
64 print vardict["part2"]["global"]["ip"]

这里只提供一种思路,并验证其可行性,具体实施可以借助C++等其它语言改写以满足需求。

相关文章推荐

python学习——编写配置文件

有了Web框架和ORM框架,我们就可以开始装配App了。 通常,一个Web App在运行时都需要读取配置文件,比如数据库的用户名、口令等,在不同的环境中运行时,Web App可以通过读取不同的配置文...

Python3 配置文件(configparser)

Python3 配置文件(configparser) configparser 可以读写和解析注释文件, 但是没有写入注释的功能...
  • Rozol
  • Rozol
  • 2017年05月28日 15:32
  • 2279

python读conf配置文件--ConfigParser

python读写配置文件还是比较方便得。   1) 基本的读取配置文件      -read(filename) 直接读取ini文件内容      -sections() 得到所有的secti...

Python读取配置文件

一、argparse argparse,是Python标准库中推荐使用的编写命令行程序的工具。也可以用于读取配置文件。 1.conf配置文件: { "game0": { "ip":"127...

Python中配置文件的使用

因为项目的需要,要用到Python加载配置文件。本文主要参考了http://www.cnblogs.com/victorwu/p/5762931.html配置文件的读取示例a) 配置文件中包含一个或多...
  • mrbcy
  • mrbcy
  • 2017年03月03日 17:10
  • 991

python配置文件(ini文件)

为了便于参数调试,需要将程序中的参数与程序分离开,于是存储参数, 传参以及解析参数困惑了好久,java可以使用properties文件,那么python用什么呢(python新手),搜寻良久,终于在网...

python-ConfigParser模块【读写配置文件】

http://www.codesky.net/article/201003/122500.html http://www.linuxso.com/linuxbiancheng/8987.html ...

python 解析配置文件

#!/usr/bin/env python #coding=utf-8   #上面来显示中文的。不然中文会出问题 ''' 说明:输入的文件,#开头的一行默认是注释符...
  • cogbee
  • cogbee
  • 2014年04月22日 21:34
  • 2776

Python读取ini配置文件

需求: 写个项目,用到数据库,多个地方使用,不能硬编码。很类似java的properties文件 Python支持ini文件的读取 涉及模块: ConfigParser xml文件 db_...
  • wklken
  • wklken
  • 2012年02月19日 01:19
  • 21735

python操作cfg配置文件

*.cfg文件一般是程序运行的配置文件,python为读写常见配置文件提供了一个ConfigParser模块,所以在python中解析配置文件相当简单,下面就举例说明一下具体的操作方法。   写文...
  • N_sev7
  • N_sev7
  • 2016年02月24日 11:50
  • 3196
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读取配置文件和自定义配置文件(python实现)
举报原因:
原因补充:

(最多只允许输入30个字)