需求:
写个项目,用到数据库,多个地方使用,不能硬编码。很类似java的properties文件
Python支持ini文件的读取
涉及模块:
ConfigParser
xml文件
- db_config.ini
- [baseconf]
- host=127.0.0.1
- port=3306
- user=root
- password=root
- db_name=evaluting_sys
- [concurrent]
- processor=20
对应的python代码
- #!/usr/bin/python
- # -*- coding:utf-8 -*-
- #author: lingyue.wkl
- #desc: use to db ops
- #---------------------
- #2012-02-18 created
- #---------------------
- import sys,os
- import ConfigParser
- class Db_Connector:
- def __init__(self, config_file_path):
- cf = ConfigParser.ConfigParser()
- cf.read(config_file_path)
- s = cf.sections()
- print 'section:', s
- o = cf.options("baseconf")
- print 'options:', o
- v = cf.items("baseconf")
- print 'db:', v
- db_host = cf.get("baseconf", "host")
- db_port = cf.getint("baseconf", "port")
- db_user = cf.get("baseconf", "user")
- db_pwd = cf.get("baseconf", "password")
- print db_host, db_port, db_user, db_pwd
- cf.set("baseconf", "db_pass", "123456")
- cf.write(open("config_file_path", "w"))
- if __name__ == "__main__":
- f = Db_Connector("../conf/db_config.ini")
得到结果:
section: ['concurrent', 'baseconf']
options: ['host', 'db_name', 'user', 'password', 'port']
db: [('host', '127.0.0.1'), ('db_name', 'evaluting_sys'), ('user', 'root'), ('password', 'root'), ('port', '3306')]
127.0.0.1 3306 root root
---------------------------------------------update 2012-09-02
通用模块:支持命令行+import两种形式
ini_op.py
- #!/usr/bin/python
- # -*- coding:utf-8 -*-
- #author: lingyue.wkl
- #desc: use to read ini
- #---------------------
- #2012-02-18 created
- #2012-09-02 changed for class support
- #---------------------
- import sys,os,time
- import ConfigParser
- class Config:
- def __init__(self, path):
- self.path = path
- self.cf = ConfigParser.ConfigParser()
- self.cf.read(self.path)
- def get(self, field, key):
- result = ""
- try:
- result = self.cf.get(field, key)
- except:
- result = ""
- return result
- def set(self, filed, key, value):
- try:
- self.cf.set(field, key, value)
- cf.write(open(self.path,'w'))
- except:
- return False
- return True
- def read_config(config_file_path, field, key):
- cf = ConfigParser.ConfigParser()
- try:
- cf.read(config_file_path)
- result = cf.get(field, key)
- except:
- sys.exit(1)
- return result
- def write_config(config_file_path, field, key, value):
- cf = ConfigParser.ConfigParser()
- try:
- cf.read(config_file_path)
- cf.set(field, key, value)
- cf.write(open(config_file_path,'w'))
- except:
- sys.exit(1)
- return True
- if __name__ == "__main__":
- if len(sys.argv) < 4:
- sys.exit(1)
- config_file_path = sys.argv[1]
- field = sys.argv[2]
- key = sys.argv[3]
- if len(sys.argv) == 4:
- print read_config(config_file_path, field, key)
- else:
- value = sys.argv[4]
- write_config(config_file_path, field, key, value)