python解析properties配置文件

在Python中,自定义方法,读取properties格式的文件。

my.properties文件

  #这一行是注释
#这也行是注释
host= daniubiji.cn
port =3306
user=张三
  password=aaabbb

 

上面的配置文件一共有8行,每一行都有各自的特点
第一行:空行
第二行:有若干空格
第三行:有空格,且有井号开头的注释
第四行:井号开头的注释
第五行:等号右侧有空格
第六行:等号左侧有空格
第七行:有中文字符
第八行:变量值左侧有空格
如上,只列出了可能出现的情况,还有更多情况,请自行补充

功能实现

我们的目标是获取当前,配置文件都有哪些配置项,以及配置项的值是什么。
通过观察可以看出,配置文件格式非常清晰,我们可以以dict字典的形式存储。所以使用python编写方法实现,并将结果返回到dict字典中。
当然,如果不考虑上面的情况,properties文件是一个格式非常清晰的形式,我们可以使用如下代码:
import os

def readConf(path):
    myDict = {}
    if not os.path.isfile(path):
        print "propertity file not exist!"
        return False
    fp = open(path , "r")
    try:
        line = fp.readline()
        while line:
            line = line.strip(' \t\n')
            if line and not line.startswith("#"):
                print line
                list = line.split("=")
                list[0] = list[0].strip(' \t\n')
                list[1] = list[1].strip(' \t\n')
                myDict[ list[0] ] = list[1]
            line = fp.readline()
    finally:
        fp.close()
    return myDict

getMyDict = readConf("my.properties")

print "host:", getMyDict.get('host')
print "user:", getMyDict.get("user")
print "items:", getMyDict.items()
print "port:", getMyDict.has_key("port")
print "keys:", getMyDict.keys()

 

程序输出

如何取dictionary字典中的数据,可以参考字典的用法

优化

如果不想使用while,也可以使用for来做循环
def readConf2(path):
    myDict = {}
    if not os.path.isfile(path):
        print "propertity file not exist!"
        return False
    fp = open(path , "r")
    try:
        for line in fp:
            line = line.strip(' \t\n')
            if line and not line.startswith("#"):
                print line
                list = line.split("=")
                list[0] = list[0].strip(' \t\n')
                list[1] = list[1].strip(' \t\n')
                myDict[ list[0] ] = list[1]
    finally:
        fp.close()
    return myDict

 

补充

上面一系列的处理,肯定不能搞定所有的异常,所以尽量还是要配置文件格式更整齐一些。

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注