在运行程序时需要读取不同模块的参数,这时候可以用configparser包进行处理,超级方便。
比如参数文件如下:(随便造的)
[Section1]
a =1 ##a
B = "hi"
[Section2]
c= "c"
d = "-p 123"
我写了一个函数来提取参数
import configparser
def get_all_config(conf_file):
'''
读取所有的config文件
:param conf_file: 参数文件
:return: config[module] 字典,还有默认"DEFAULT"参数模块
'''
config = configparser.ConfigParser()
# 本行代码保证了打印option时,保持原option的大小写样式
config.optionxform = lambda x:x
config.read(conf_file)
# 去除参数value之后的“#”注释,并删除参数两侧空格
f = lambda x:x.partition("#")[0]
config = {key1: {key2: f(config[key1][key2]).strip() for key2 in config[key1].keys()} for key1 in config.keys()}
return config
可以简单的调用:
import configparser
cf_para = get_all_config("config.conf")
print(cf_para['Section1']['a']) # 1
这个函数主要的重点在于config.optionxform = lambda x:x
保留了参数的大小写格式,比如a, B等,而不是都是小写。
然后另外一个点是对提取的参数数据进行了去除参数后的#注释以及两侧的空格
f = lambda x:x.partition("#")[0]
config = {key1: {key2: f(config[key1][key2]).strip() for key2 in config[key1].keys()} for key1 in config.keys()}`
这两句代码是遍历字典的字典,并对值进行了格式化。
希望这个函数对参数解析问题的朋友有帮助,如发现错误或有更好的建议欢迎留言~
网友评论