def check_value(value):
"""判断字符串是否为整数、小数或bool值
参数:value为字符串
返回:如果是整数、小数或bool值,则返回相应类型,否则返回字符串类型
"""
if value.count(".") != 1: # 非小数
if value.isdigit(): # 判断是否为正整数
return int(value)
elif value.count("-") == 1 and value.startswith("-"): # 判断是否为负整数
num = value.split("-")[-1]
if num.isdigit():
return int(value)
else:
return check_bool(value)
else:
return check_bool(value)
else: # 可能为小数
left = value.split(".")[0]
right = value.split(".")[1]
if right.isdigit():
if left.isdigit(): # 是否为正小数
return float(value)
elif left.count("-") == 1 and left.startswith("-"): # 是否为负小数
left_num = left.split("-")[-1]
if left_num.isdigit():
return float(value)
else:
return check_bool(value)
else:
return check_bool(value)
else:
return check_bool(value)
def check_bool(value):
"""判断字符串是否为bool值
参数:value为字符串
返回:如果是true/false, on/off(不区分大小写),则返回True, False,否则返回字符串类型
"""
if value.title() in ("True", "On"): # title()函数将字符串的首字母大写,其余字母全小写
return True
elif value.title() in ("False", "Off"):
return False
else:
return value
大致思路:
1、根据小数点判断是否为小数
2、判断小数点两边的是否为整数(需考虑负号的情况)
3、注意:isdigit() 方法只能判断正整数,不能判断负整数,所以需要额外判断一下负整数的情况。
4、如果需要返回非整数、小数的字符串,就要像上面那样补全else的return,否则会出现漏掉一些字符串的情况,导致一些字符串输出为None
5、可以直接使用,调用check_value()函数即可,参数为字符串。
6、我自己用这个函数把 ini 的配置文件全部转化为Python 字典。
参考文章: