ConfigParser 同时读取布尔值/字符串/整数 Python
ConfigParser read Booleans / String / Integer at the same time with Python
这是我的 config.ini:
[LOADER]
text = example text
size = 17
settings = None
run = False
但是当我打印它时,使用:
config = ConfigParser()
config.read('config.ini')
print(config._sections['LOADER'])
我明白了:
{'text': 'example text', 'size': '17', 'settings': 'None', 'run': 'False'}
但我想要这个:
{'text': 'example text', 'size': 17, 'settings': None, 'run': False}
我用ConfigParser尝试了几种方法,我试图编辑列表来替换boolean中的字符串,但我真的做不到,谢谢。
递归函数可能对此有好处:
def load_it(obj):
if isinstance(obj, dict):
return {k: load_it(v) for k, v in obj.items()}
if isinstance(obj, list):
return [load_it(elem) for elem in obj]
if isinstance(obj, str):
if obj == 'None':
return None
if obj.isnumeric():
return int(obj)
if obj.replace('.', '', 1).isnumeric():
return float(obj)
if obj.upper() in ('TRUE', 'FALSE', 'T', 'F'):
return obj.upper() in ('TRUE', 'T')
return obj
data = load_it({'text': 'example text', 'size': '17', 'settings': 'None', 'run': 'False'})
print(data)
输出:
{'text': 'example text', 'size': 17, 'settings': None, 'run': False}
这是我的 config.ini:
[LOADER]
text = example text
size = 17
settings = None
run = False
但是当我打印它时,使用:
config = ConfigParser()
config.read('config.ini')
print(config._sections['LOADER'])
我明白了:
{'text': 'example text', 'size': '17', 'settings': 'None', 'run': 'False'}
但我想要这个:
{'text': 'example text', 'size': 17, 'settings': None, 'run': False}
我用ConfigParser尝试了几种方法,我试图编辑列表来替换boolean中的字符串,但我真的做不到,谢谢。
递归函数可能对此有好处:
def load_it(obj):
if isinstance(obj, dict):
return {k: load_it(v) for k, v in obj.items()}
if isinstance(obj, list):
return [load_it(elem) for elem in obj]
if isinstance(obj, str):
if obj == 'None':
return None
if obj.isnumeric():
return int(obj)
if obj.replace('.', '', 1).isnumeric():
return float(obj)
if obj.upper() in ('TRUE', 'FALSE', 'T', 'F'):
return obj.upper() in ('TRUE', 'T')
return obj
data = load_it({'text': 'example text', 'size': '17', 'settings': 'None', 'run': 'False'})
print(data)
输出:
{'text': 'example text', 'size': 17, 'settings': None, 'run': False}