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();
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章