ini处理工具

"""

14/04/29修改, 换了下结构=。=。。。

之前是的结构是{section:[{key:value}, ...], ...}之前一定是脑子抽了才这样写= =

改成了{section:{key:value, key:value, ...}, ...}

"""

#coding=utf-8
import sys;
import os;
import gc;

class IniEngine():
    def __init__(self, fileName = "", dict = {}):
        self._dict = {};
        if(fileName != ""):
            self.readFromFile(fileName);
        elif(dict != {}):
            self.setDict(dict);
        
    def readFromFile(self, fileName):
        try:
            file = open(fileName, "r");
        except:
            raise Exception("无法读取文件!");
        section = "";
        gc.disable();
        for line in file:
            line = line.strip("\n").strip().split(";")[0];   #处理掉空格,回车,注释
            if(line.startswith("[") and line.endswith("]")):
                section = line.strip("[").strip("]");
            elif(line == ""): #忽略空行
                continue;
            else:
                key, value = line.split("=");
                key = key.strip();
                value = value.strip();
                if(section != ""):
                    self.setItem(section, key, value);
                else:
                    raise Exception("解析过程中出现了错误, ini文件格式不正确!");
        gc.enable();
        file.close();
        
    def setSection(self, section):
        dict = self.getDict();
        if(section not in dict):
            dict.update({section:{}});
        return dict[section];
        
    def setItem(self, section, key, value):
        keyDict = self.setSection(section);
        keyDict.update({key:value});
        return keyDict;
        
    def getKeys(self, section, default = None):
        dict = self.getDict();
        if(section in dict):
            return dict[section];
        return default;
        
    def getValue(self, section, key, default = None):
        keyDict = self.getKeys(section);
        if(key in keyDict):
            return keyDict[key];
        return default;
        
    def delSection(self, section):
        dict = self.getDict();
        if(section in dict):
            return dict.pop(section);
        return None;
        
    def delKey(self, section, key):
        keyDict = self.getKeys(section);
        if(key in keyDict):
            return keyDict.pop(key);
        return None;
        
    def setDict(self, dict):
        self._dict = dict;
        
    def getDict(self):
        return self._dict;
        
    def writeToFile(self, fileName):
        try:
            file = open(fileName, "w");
        except:
            raise Exception("无法打开文件!");
        dict = self.getDict();
        for section, keyDict in dict.items():
            file.write("[{0}]\n".format(section));
            for key, value in keyDict.items():
                file.write("{0}={1}\n".format(key, value));
        file.close();
                
        
def main():
    ini = IniEngine();
    ini.readFromFile(r".\test\1.ini");
    print(ini.getDict());
    ini.setSection("test77");
    ini.setItem("test223", "1", "5");
    ini.setItem("test21", "wer", "xc");
    ini.setItem("test546", "rs", ",m");
    print(ini.getKeys("sec", "sdad"));
    ini.delSection("test21");
    ini.delKey("test223", "1");
    print(ini.getDict());
    ini.writeToFile(r".\test\2.ini");
    
if(__name__ == "__main__"):
    main();
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值