ini配置文件是被configParser直接解析然后再加载的,如果只是修改配置文件,并不会改变已经加载的配置
INI文件结构简单描述 INI文件就是扩展名为“ini”的文件。在Windows系统中,INI文件是很多,最重要的就是“System.ini”、“System32.ini”和“Win.ini”。 该文件主要存放用户所做的选择以及系统的各种参数。用户可以通过修改INI文件,来改变应用程序和系统的很多配置。但自从Windows 95的退出,在Windows系统中引入了注册表的概念,INI文件在Windows系统的地位就开始不断下滑,这是因为注册表的独特优点,使应用程序和系统都把许多参数和初始化信息放进了注册表中。但在某些场合,INI文件还拥有其不可替代的地位。
INI文件结构
INI文件是一种按照特点方式排列的文本文件。每一个INI文件结构都非常类似,由若干段落(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,等号右边的就是关键字对应的值(value)。其一般形式如下:
1 2 3 4 5 6 7 [Section1 ] KeyWord1 = Valuel KeyWord2 = Value2 …… [Section2 ] KeyWord3 = Value3 KeyWord4 = Value4
其中:[Section1]用来表示一个段落。因为INI文件可能是项目中共用的,所以使用[Section]段名来区分不同用途的参数区。
例如:[Section1]表示传感器灵敏度参数区;[Section2 ]表示测量通道参数区等等。KeyWord1=value1 用来表示一个参数名和值。
格式 INI文件由节、键、值组成。
节 [section]
参数(键=值) name=value
注解 注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。
linux 配置文件使用 #
注释;
Python ConfigParser Python 标准库的 ConfigParser 模块提供了一套完整的 API 来读取和操作配置文件。
在python 3 中ConfigParser模块名已更名为configparser。 configparser模块支持读取.conf和.ini等类型的文件。 但是存在一些缺陷,无法识别section的大小写,无法读取文件注释,这样修带有注释的配置文件时就会存在问题。
操作配置文件 配置文件实例化 1 2 3 4 5 6 7 8 9 10 config = ConfigParser.SafeConfigParser() config.read('config.ini' ) config.read_file(f, source =None) config.read_string(string, source =’’) config.read_dict(dictionary, source =’’)
配置文件的读取和修改 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 # sections(): 得到所有的section ,并以列表的形式返回 config. sections() # defaults():返回一个包含实例范围默认值的词典 config. defaults() # 添加一个新的section config. add_section(section ) # 判断是否有section config. has_section(section ) # 得到该section 的所有option config. options(section ) # items 得到section 的所有键值对 config. items(option ) # 判断如果section 和option 都存在则返回True否则False config. has_option(section , option ) # 得到section 中option 的值,返回为string类型 config. get(section , option , *, raw=False, vars=None[, fallback]) # 得到section 中option 的值,返回为int 类型 config. getint(section ,option ) # 得到section 中option 的值,返回为float 类型 config. getfloat(section ,option ) # 得到section 中option 的值,返回为boolean类型 config. getboolean(section , option ) # 对section 中的option 进行更新,如果没有相应的option ,会新增 config. set(section , option , value) # 从指定section 移除option config. remove_option(section , option ) # 移除section config. remove_section(section )
配置文件的写入 1 2 3 4 5 6 7 8 with open ("config.ini" , "w+" ) as f: config.write (f) config.write (sys.stdout ) config.write (open ('new_book.info' ,'w' ))
示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 import threadingimport configparserclass Config (object) : _instance_lock = threading.Lock() def __init__ (self) : self.config = configparser.ConfigParser() self.config.read("config.ini" ) def __new__ (cls, *arg, **kwargs) : if not hasattr(Config, "_instance" ): with Config._instance_lock: if not hasattr(Config, "_instance" ): Config._instance = object.__new__(cls) return Config._instance def get_config (self, section, k) : return self.config.get(section, k) def get_section (self) : return self.config.sections() def get_section_all_key (self, section) : return self.config.options(section) def add_section (self, section) : self.config.add_section(section) def update_k (self, section, k, v) : self.config.set(section, k, v) def remove_section (self, section) : self.config.remove_section(section) def remove_k (self, section, k) : self.config.remove_option(section, k) def save_config (self) : with open("config.ini" , "w+" ) as f: self.config.write(f)
操作字典的方式操作文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 """生成configparser配置文件 ,字典的形式""" import configparser config = configparser.ConfigParser() config["DEFAULT" ] = {'ServerAliveInterval' : '45' , 'Compression' : 'yes' , 'CompressionLevel' : '9' } config['bitbucket.org' ] = {} config['bitbucket.org' ]['User' ] = 'hg' config['topsecret.server.com' ] = {} topsecret = config['topsecret.server.com' ] topsecret['Host Port' ] = '50022' topsecret['ForwardX11' ] = 'no' config['DEFAULT' ]['ForwardX11' ] = 'yes' with open('example.ini' , 'w' ) as configfile: config.write(configfile)