Python/Numpy是否内置字符串数字格式判断方法?
关于字符串数字类型细分判断的内置方法疑问
我需要判断一个字符串属于纯整数(plain int)、纯浮点数(plain float)、科学计数法浮点数(含e/E的float),还是无法解析为数字的字符串。我已自行实现了如下判断函数,但觉得这类功能可能已内置在Python或Numpy中,经简单检索未找到相关方法,特询问是否存在此类现成实现?
PLAIN_INT, PLAIN_FLOAT, E_FLOAT, STRING = range(4) # should be just optionally - then numbers sample_plain_ints = ['1', '0', '-5', '333333333'] # need to contain a dot plain_floats = ['1.0', '-5.0', '-33.212', '0.0', '-1.', '-3.'] # do not need to contain a dot e_floats = ['1.3e5', '-1.2e5', '0.0e0', '5e-3', '3e23', '3E5', '-3E-12'] # other strings = ['aether', '1ee3', 'buzz', 'eeep', '121212beep'] def determine_str_type(item): try: float(item) try: int(item) return PLAIN_INT except ValueError: return E_FLOAT if 'E' in item.upper() else PLAIN_FLOAT except ValueError: return STRING assert all([determine_str_type(item) == PLAIN_INT for item in sample_plain_ints]) assert all([determine_str_type(item) == PLAIN_FLOAT for item in plain_floats]) assert all([determine_str_type(item) == E_FLOAT for item in e_floats]) assert all([determine_str_type(item) == STRING for item in strings])
Python标准库和Numpy中没有完全契合该需求的现成函数。这类对数字格式的细分判断属于特定场景需求,内置方法通常只提供「能否转换为数字」的基础判断,不会区分纯整数、带小数点的浮点数、科学计数法浮点数这三类细分格式。
你现有的函数逻辑清晰,已经能覆盖测试用例中的所有场景,可直接使用。若要优化,需注意两个细节:
- 函数会将带前后空格的数字字符串(比如
' 123 ')判定为PLAIN_INT,若需要严格匹配无额外空格的字符串,可先对输入执行item.strip()处理 - 对于
'1.000'这类可转换为整数的浮点数字符串,函数会判定为PLAIN_FLOAT,这符合你定义的「纯浮点数需要包含小数点」规则
内容的提问来源于stack exchange,提问作者Carbon
相关产品推荐
相关产品推荐

