python开发_configparser_解析.ini配置文件工具_完整版_博主推荐

#
#   最近出了一趟差,是从20号去的,今天回来...
#   就把最近学习的python内容给大家分享一下...
#
'''
   在python中,configparser模块提供了操作*.ini配置文件的一些操作方法
   就如python的API中所描述的一样:

       This module provides the ConfigParser class which implements
    a basic configuration language which provides a structure similar
    to what’s found in Microsoft Windows INI files. You can use this
    to write Python programs which can be customized by end users easily.

    以下实现的功能是:
    将一些配置信息写入到指定文件中,并且提供方法获取配置文件中的信息
'''

下面是我做的demo,

运行效果:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
SHOW_LOG : True
The path [C:\test] dosen't exist!
Created the path [C:\test]
打开文件:[C:\test\hongten.ini]
开始写入数据:[{'url': 'jdbc:oracle:thin:@', 'ip': '172.0.0.1', 'isJndiDs': 'false', 'user': 'root', 'port': '1521', 'driverClassName': 'oracle.jdbc.OracleDriver', 'password': '*******', 'name': 'hongten_datasource', 'dbName': 'db_hongten'}]
打开文件:[C:\test\hongten.ini]
开始读取数据:[url] = [jdbc:oracle:thin:@]
开始读取数据:[ip] = [172.0.0.1]
开始读取数据:[isjndids] = [false]
开始读取数据:[user] = [root]
开始读取数据:[port] = [1521]
开始读取数据:[driverclassname] = [oracle.jdbc.OracleDriver]
开始读取数据:[password] = [*******]
开始读取数据:[name] = [hongten_datasource]
开始读取数据:[dbname] = [db_hongten]
url : jdbc:oracle:thin:@,ip : 172.0.0.1,isjndids : false,user : root,port : 1521,driverclassname : oracle.jdbc.OracleDriver,password : *******,name : hongten_datasource,dbname : db_hongten
##################################################
打开文件:[C:\test\hongten.ini]
写入数据:[DATA_SOURCE_INFO]
[url : jdbc:oracle:thin:@,ip : 172.0.0.1,isjndids : false,user : root,port : 1521,driverclassname : oracle.jdbc.OracleDriver,password : *******,name : hongten_datasource,dbname : db_hongten]
写入数据:[PROVINCES]
[zj : Zhejiang,bj : Beijing,gd : Guangdong,sh : Shanghai]
写入数据:[AUTHOR_INFO]
[create : 2013-08-22,blog : http://www.cnblogs.com/hongten,author : hongten,mailto : hongtenzone@foxmail.com,qq : 648719819,version : 1.0]
打开文件:[C:\test\hongten.ini]
获取模块名称:[DATA_SOURCE_INFO]
开始读取数据:[url] = [jdbc:oracle:thin:@]
开始读取数据:[ip] = [172.0.0.1]
开始读取数据:[isjndids] = [false]
开始读取数据:[user] = [root]
开始读取数据:[port] = [1521]
开始读取数据:[driverclassname] = [oracle.jdbc.OracleDriver]
开始读取数据:[password] = [*******]
开始读取数据:[name] = [hongten_datasource]
开始读取数据:[dbname] = [db_hongten]
获取模块名称:[PROVINCES]
开始读取数据:[zj] = [Zhejiang]
开始读取数据:[bj] = [Beijing]
开始读取数据:[gd] = [Guangdong]
开始读取数据:[sh] = [Shanghai]
获取模块名称:[AUTHOR_INFO]
开始读取数据:[create] = [2013-08-22]
开始读取数据:[blog] = [http://www.cnblogs.com/hongten]
开始读取数据:[author] = [hongten]
开始读取数据:[mailto] = [hongtenzone@foxmail.com]
开始读取数据:[qq] = [648719819]
开始读取数据:[version] = [1.0]
{'DATA_SOURCE_INFO': {'driverclassname': 'oracle.jdbc.OracleDriver', 'user': 'root', 'isjndids': 'false', 'name': 'hongten_datasource', 'port': '1521', 'url': 'jdbc:oracle:thin:@', 'password': '*******', 'ip': '172.0.0.1', 'dbname': 'db_hongten'}, 'PROVINCES': {'bj': 'Beijing', 'zj': 'Zhejiang', 'gd': 'Guangdong', 'sh': 'Shanghai'}, 'AUTHOR_INFO': {'create': '2013-08-22', 'blog': 'http://www.cnblogs.com/hongten', 'author': 'hongten', 'mailto': 'hongtenzone@foxmail.com', 'qq': '648719819', 'version': '1.0'}}
##################################################
打开文件:[C:\test\hongten.ini]
获取到[C:\test\hongten.ini]文件,模块:[DATA_SOURCE_INFO],键:[name],值:[hongten_datasource]
hongten_datasource
>>> 

c:\\test目录下面的情况:

====================================================

代码部分:

====================================================

  1 #python configparser
  2 
  3 #Author  : Hongten
  4 #Mailto  : hongtenzone@foxmail.com
  5 #Blog    : http://www.cnblogs.com/hongten
  6 #QQ      : 648719819
  7 #Create  : 2013-08-22
  8 #Version : 1.0
  9 
 10 import os
 11 import configparser
 12 
 13 '''
 14    在python中,configparser模块提供了操作*.ini配置文件的一些操作方法
 15    就如python的API中所描述的一样:
 16 
 17        This module provides the ConfigParser class which implements
 18     a basic configuration language which provides a structure similar
 19     to what’s found in Microsoft Windows INI files. You can use this
 20     to write Python programs which can be customized by end users easily.
 21 
 22     以下实现的功能是:
 23     将一些配置信息写入到指定文件中,并且提供方法获取配置文件中的信息
 24 '''
 25 
 26 #global var
 27 SHOW_LOG = True
 28 #Microsoft Windows INI files path
 29 HONGTEN_INT_PATH = ''
 30 
 31 def mkdirs(path):
 32     '''创建多级目录'''
 33     if os.path.exists(path):
 34         if SHOW_LOG:
 35             print('The path [{}] existing!'.format(path))
 36     else:
 37         if SHOW_LOG:
 38             print('The path [{}] dosen\'t exist!'.format(path))
 39         os.makedirs(path)
 40         if SHOW_LOG:
 41             print('Created the path [{}]'.format(path))
 42 
 43 def get_path(absPath):
 44     '''获取到一个绝对路径的目录,
 45     如绝对路径:'C:\\test\\hongten.ini'
 46     则返回的是'C:\\test'
 47     '''
 48     if os.path.exists(absPath):
 49         if SHOW_LOG:
 50             print('the path [{}] existing!'.format(absPath))
 51         return os.path.split(absPath)[0]
 52     else:
 53         return os.path.split(absPath)[0]
 54 
 55 def get_config():
 56     '''return a configparser object'''
 57     return configparser.ConfigParser()
 58 
 59 def write_datas_2_config(path, config, datas):
 60     '''向指定的ini配置文件中写入数据
 61     参数:
 62         path       -- 指定的ini配置文件路径
 63         config     -- configparaser的一个对象
 64         datas      -- 配置文件的数据,类型为字典类型
 65                       在datas数据中有key,value,对于
 66                       每一个value来说都是字典类型,如:
 67                       datas = {'a' : {'1', '2'}
 68                       'b' : {'c', 'd', 'e'}}
 69         '''
 70     for k, v in datas.items():
 71         config[k] = v
 72     if SHOW_LOG:
 73         print('打开文件:[{}]'.format(path))
 74     with open(path, 'w') as cf:
 75         if SHOW_LOG:
 76             for name in config.sections():
 77                 c = ''
 78                 for key in config[name]:
 79                     c += key + ' : ' + config[name][key] + ','
 80                 print('写入数据:[{}]\n[{}]'.format(name, c[0:-1]))
 81         config.write(cf)
 82 
 83 def write_config(path, config, name, data):
 84     '''向指定的ini配置文件中写入数据
 85     参数:
 86         path       -- 指定的ini配置文件路径
 87         config     -- configparaser的一个对象
 88         name       -- 配置项的root名称
 89         data       -- 配置文件的数据,类型为字典类型
 90                       如:
 91                       data = {'a', 'b', 'c'}
 92     '''
 93     config[name] = data
 94     if SHOW_LOG:
 95         print('打开文件:[{}]'.format(path))
 96     with open(path, 'w') as cf:
 97         if SHOW_LOG:
 98             print('开始写入数据:[{}]'.format(data))
 99         config.write(cf)
100 
101 def read_config(path, config, name):
102     '''读取配置文件信息'''
103     if SHOW_LOG:
104         print('打开文件:[{}]'.format(path))
105     config.read(path)
106     sections = config.sections()
107     if name is not None and name != '' and name in sections:
108         content = ''
109         for key in config[name]:
110             if SHOW_LOG:
111                 print('开始读取数据:[{}] = [{}]'.format(key, config[name][key]))
112             content += key + ' : ' + config[name][key] +','
113         return content[0:-1]
114     else:
115         print('name is Empty or equals None or not int sections!')
116     
117 def read_form_config(path, config):
118     '''读取配置文件信息,以字典的形式返回'''
119     if SHOW_LOG:
120         print('打开文件:[{}]'.format(path))
121     config.read(path)
122     sections = config.sections()
123     #返回的字典对象
124     result_dict = {}
125     for name in sections:
126         #字典中每一个value都是一个字典对象
127         temp_dict = {}
128         if SHOW_LOG:
129             print('获取模块名称:[{}]'.format(name))
130         for key in config[name]:
131             if SHOW_LOG:
132                 print('开始读取数据:[{}] = [{}]'.format(key, config[name][key]))
133             temp_dict[key] = config[name][key]
134         result_dict[name] = temp_dict
135     return result_dict
136 
137 def get_value_from_config(path, config, name, key):
138     '''
139     从ini文件中获取某个key所对应的value值
140     参数:
141         path       -- ini文件路径
142         config     -- configparser对象
143         name       -- ini文件中的模块名称
144         key        -- 对应模块中的key值
145     '''
146     if SHOW_LOG:
147         print('打开文件:[{}]'.format(path))
148     config.read(path)
149     sections =  config.sections()
150     if name is not None and name != '' and name in sections:
151         keys = []
152         for k in config[name]:
153             keys.append(k)
154         if key in keys:
155             if SHOW_LOG:
156                 print('获取到[{}]文件,模块:[{}],键:[{}],值:[{}]'.format(path, name, key, config[name][key]))
157             return config[name][key]
158         else:
159             print('不存在对应的key...')
160     else:
161         print('name is Empty or equals None or not int sections!')
162 
163 def init():
164     global SHOW_LOG
165     SHOW_LOG = True
166     print('SHOW_LOG : {}'.format(SHOW_LOG))
167     #Microsoft Windows INI files path
168     global HONGTEN_INT_PATH
169     HONGTEN_INT_PATH = 'C:\\test\\hongten.ini'
170     abspath = get_path(HONGTEN_INT_PATH)
171     mkdirs(abspath)
172     
173         
174 def main():
175     init()
176     data = {'name' : 'hongten_datasource',
177             'driverClassName' : 'oracle.jdbc.OracleDriver',
178             'isJndiDs' : 'false',
179             'ip' : '172.0.0.1',
180             'port' : '1521',
181             'dbName' : 'db_hongten',
182             'user' : 'root',
183             'password' : '*******',
184             'url' : 'jdbc:oracle:thin:@'}
185     prov_data = {'GD' : 'Guangdong',
186                  'SH' : 'Shanghai',
187                  'BJ' : 'Beijing',
188                  'ZJ' : 'Zhejiang'}
189     author_data = {'author' : 'hongten',
190                    'mailto' : 'hongtenzone@foxmail.com',
191                    'blog' : 'http://www.cnblogs.com/hongten',
192                    'qq' : '648719819',
193                    'create' : '2013-08-22',
194                    'version' : '1.0'}
195     datas = {'DATA_SOURCE_INFO' : data,
196              'PROVINCES' : prov_data,
197              'AUTHOR_INFO' : author_data}
198     name = 'DATA_SOURCE_INFO'
199     key = 'name'
200     config = get_config()
201     write_config(HONGTEN_INT_PATH, config, name, data)
202     content = read_config(HONGTEN_INT_PATH, config, name)
203     print(content)
204     print('#' * 50)
205     write_datas_2_config(HONGTEN_INT_PATH, config, datas)
206     content = read_form_config(HONGTEN_INT_PATH, config)
207     print(content)
208     print('#' * 50)
209     value = get_value_from_config(HONGTEN_INT_PATH, config, name, key)
210     print(value)
211     
212 if __name__ == '__main__':
213     main()

 

posted @ 2013-08-24 00:13  Hongten  阅读(4791)  评论(0编辑  收藏  举报
Fork me on GitHub