戳人痛处

导航

[python] 一个INI配置文件封装模块

def ini_init(self,ini_dict:dict={})

def ini_init(self,ini_dict:dict={}):
        if os.path.exists(self.ini_f):
            print("exist")
        else:
            with open(self.ini_f,"w") as p:
                print("create ok")
            self.conf.read(self.ini_f)
            for idx in ini_dict:
                if not self.conf.has_section(idx):
                    self.conf.add_section(idx)
                    for idxx in ini_dict[idx]:
                        self.conf.set(idx,idxx,str(ini_dict[idx][idxx]))
            self.conf.write(open(self.ini_f,'w'))

没有就创建并设定键值;

def ini_read(self,ini_dict:dict={}):

def ini_read(self,ini_dict:dict={}):
        self.ini_init(ini_dict)
        self.conf.read(self.ini_f)
        for idx in ini_dict:
            for idxx in ini_dict[idx]:
                if "_bool" in idxx:
                    ini_dict[idx][idxx]=self.conf.getboolean(idx,idxx)
                elif "_int" in idxx:
                    ini_dict[idx][idxx]=self.conf.getint(idx,idxx)
                elif "_float" in idxx:
                    ini_dict[idx][idxx]=self.conf.getfloat(idx,idxx)
                else:
                    ini_dict[idx][idxx]=self.conf.get(idx,idxx)
        return True

根据键值返回对应得类型

def ini_write(self,ini_dict:dict={}):

def ini_write(self,ini_dict:dict={}):
        self.conf.read(self.ini_f)
        self.ini_init(ini_dict)
        for idx in ini_dict:
            for idxx in ini_dict[idx]:
                self.conf.set(idx,idxx,str(ini_dict[idx][idxx]))
        print("done")
        self.conf.write(open(self.ini_f,'w'))
        return True

将键值对写入

def __init__(self,file_path:str="./config.ini") -> None:

def __init__(self,file_path:str="./config.ini") -> None:
        '''
        设定ini文件路径
        '''
        self.ini_f = file_path
        self.conf = configparser.ConfigParser()

类初始化设定文件路径并生成对象

ALL

import configparser
import os

class Ini:
    def __init__(self,file_path:str="./config.ini") -> None:
        '''
        设定log文件路径
        '''
        self.ini_f = file_path
        self.conf = configparser.ConfigParser()

    def ini_init(self,ini_dict:dict={}):
        if os.path.exists(self.ini_f):
            print("exist")
        else:
            with open(self.ini_f,"w") as p:
                print("create ok")
            self.conf.read(self.ini_f)
            for idx in ini_dict:
                if not self.conf.has_section(idx):
                    self.conf.add_section(idx)
                    for idxx in ini_dict[idx]:
                        self.conf.set(idx,idxx,str(ini_dict[idx][idxx]))
            self.conf.write(open(self.ini_f,'w'))
    def ini_read(self,ini_dict:dict={}):
        self.ini_init(ini_dict)
        self.conf.read(self.ini_f)
        for idx in ini_dict:
            for idxx in ini_dict[idx]:
                if "_bool" in idxx:
                    ini_dict[idx][idxx]=self.conf.getboolean(idx,idxx)
                elif "_int" in idxx:
                    ini_dict[idx][idxx]=self.conf.getint(idx,idxx)
                elif "_float" in idxx:
                    ini_dict[idx][idxx]=self.conf.getfloat(idx,idxx)
                else:
                    ini_dict[idx][idxx]=self.conf.get(idx,idxx)
        return True
    def ini_write(self,ini_dict:dict={}):
        self.conf.read(self.ini_f)
        self.ini_init(ini_dict)
        for idx in ini_dict:
            for idxx in ini_dict[idx]:
                self.conf.set(idx,idxx,str(ini_dict[idx][idxx]))
        print("done")
        self.conf.write(open(self.ini_f,'w'))
        return True

if __name__=="__main__":
    test = {"Test1":{"cnblogs":"https://www.cnblogs.com/hardfood/","bilibili":"https://space.bilibili.com/68973181","uio_str":"opop"},
            "Test2":{"Test_int":233}}
    ini_f ="./config.ini"
    xe = Ini(ini_f)
    xe.ini_write(test)
    # xe.ini_read(test)
    print(test)

运行后ini文件内容

[Test1]
cnblogs = https://www.cnblogs.com/hardfood/
bilibili = https://space.bilibili.com/68973181
uio_str = opop

[Test2]
test_int = 233

读文件操作

inifile

[Test1]
cnblogs = https://www.cnblogs.com/hardfood/
bilibili = https://space.bilibili.com/68973181
uio_str = opop

[Test2]
test_int = 233

code

import configparser
import os

class Ini:
    def __init__(self,file_path:str="./config.ini") -> None:
        '''
        设定log文件路径
        '''
        self.ini_f = file_path
        self.conf = configparser.ConfigParser()

    def ini_init(self,ini_dict:dict={}):
        if os.path.exists(self.ini_f):
            print("exist")
        else:
            with open(self.ini_f,"w") as p:
                print("create ok")
            self.conf.read(self.ini_f)
            for idx in ini_dict:
                if not self.conf.has_section(idx):
                    self.conf.add_section(idx)
                    for idxx in ini_dict[idx]:
                        self.conf.set(idx,idxx,str(ini_dict[idx][idxx]))
            self.conf.write(open(self.ini_f,'w'))
    def ini_read(self,ini_dict:dict={}):
        self.ini_init(ini_dict)
        self.conf.read(self.ini_f)
        for idx in ini_dict:
            for idxx in ini_dict[idx]:
                if "_bool" in idxx:
                    ini_dict[idx][idxx]=self.conf.getboolean(idx,idxx)
                elif "_int" in idxx:
                    ini_dict[idx][idxx]=self.conf.getint(idx,idxx)
                elif "_float" in idxx:
                    ini_dict[idx][idxx]=self.conf.getfloat(idx,idxx)
                else:
                    ini_dict[idx][idxx]=self.conf.get(idx,idxx)
        return True
    def ini_write(self,ini_dict:dict={}):
        self.conf.read(self.ini_f)
        self.ini_init(ini_dict)
        for idx in ini_dict:
            for idxx in ini_dict[idx]:
                self.conf.set(idx,idxx,str(ini_dict[idx][idxx]))
        print("done")
        self.conf.write(open(self.ini_f,'w'))
        return True

if __name__=="__main__":
    test = {"Test1":{"cnblogs":1,"bilibili":1,"uio_str":1},
            "Test2":{"Test_int":233}}
    ini_f ="./config.ini"
    xe = Ini(ini_f)
    # xe.ini_write(test)
    xe.ini_read(test)
    print(test)

 ----改进版

参考Python模块之: configobj - 云+社区 - 腾讯云 (tencent.com)

from configobj import ConfigObj

class Ini:
    @staticmethod
    def Write(section:str,word:str,writeValue,pathDefault:str="./config.ini"):
        iniobj = ConfigObj(pathDefault,encoding="UTF8")
        if section in iniobj.sections:
            pass
        else:
            iniobj[section]={}
        iniobj[section][word]=writeValue
        iniobj.write()
    @staticmethod
    def Read(section:str,word:str,DefaultValue="",pathDefault="./config.ini"):
        iniobj = ConfigObj(pathDefault,encoding="UTF8")
        if section in iniobj.sections:
            if word in iniobj[section]:
                if "_bool" in word:
                    return bool(iniobj[section][word])
                if "_int" in word:
                    return int(iniobj[section][word])
                if "_float" in word:
                    return float(iniobj[section][word])
                return iniobj[section][word]
            else:
                iniobj[section][word]=DefaultValue
                iniobj.write()
                return DefaultValue
        else:
            iniobj[section]={}
            iniobj[section][word]=DefaultValue
            iniobj.write()
            return DefaultValue
if __name__=="__main__":
    path = ["cnblogs","com","hardfood"]
    Ini.Write(path[0],path[1],path[2])
    print("{}.{}/{}".format(path[0],path[1],Ini.Read(path[0],path[1])))

 ---用Rust写的Python轮子EasyIni(更方便的操作INI配置文件)

前言:一个用RUST语言编写的Python轮子,便捷的操作Ini配置文件,目前已在3.8.10使用OK;

使用方法:

pip install EasyIni

 

 

附Python使用代码该包仅sset和gget使用方法;

import EasyIni
import os
bb=EasyIni.sset("xx","33","33","{}/config.ini".format(os.getcwd()))
cc=EasyIni.gget("xx","33","12","{}/config.ini".format(os.getcwd()))
cc=EasyIni.gget("xx","33x","22","{}/config.ini".format(os.getcwd()))
cc=EasyIni.gget("xx","33x","21","{}/config.ini".format(os.getcwd()))
print(bb)
print(cc)

 

 

 

其中sset为根据键值对进行设置值,参数4为配置文件路径 如D:/config.ini,若没有该值则生成键值对并设置此值,若没有该文件则创建文件;即用即走;

gget则是读取值,若没有值则创建并返回默认值,也就是参数3;

数值的读写均为字符串;

posted on 2021-11-23 18:57  戳人痛处  阅读(107)  评论(0编辑  收藏  举报