您的位置:首页 > 编程语言 > Python开发

Python读取ini配置文件

2014-09-19 16:58 841 查看
需求:

写个项目,用到数据库,多个地方使用,不能硬编码。很类似java的properties文件

Python支持ini文件的读取

涉及模块:

ConfigParser

xml文件

[html]
view plaincopyprint?

db_config.ini  
[baseconf]  
host=127.0.0.1  
port=3306  
user=root  
password=root  
db_name=evaluting_sys  
[concurrent]  
processor=20  

对应的python代码

[python]
view plaincopyprint?

#!/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

[python]
view plaincopyprint?

#!/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) 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: