Python中灵活的数字字符串解析

Kev*_*sen 7 python validation parsing numbers

是否有任何Python库可以帮助解析和验证数字字符串超出内置float()函数支持的范围?例如,除了简单数字(1234.56)和科学记数法(3.2e15)之外,我希望能够解析如下格式:

  • 逗号的数字:2,147,483,647
  • 名字很大:55亿
  • 分数:1/4

我做了一些搜索,找不到任何东西,但如果这样的库还没有存在,我会感到惊讶.

Eri*_*got 6

如果要转换"本地化"数字,例如美国"2,147,483,647"表单,则可以使用语言环境模块中的atof()函数.例:

import locale
locale.setlocale(locale.LC_NUMERIC, 'en_US')
print locale.atof('1,234,456.23')  # Prints 1234456.23
Run Code Online (Sandbox Code Playgroud)

对于分数,Python现在直接处理它们(从2.6版开始); 它们甚至可以用字符串构建:

from fractions import Fraction
x = Fraction('1/4')
print float(x)  # 0.25
Run Code Online (Sandbox Code Playgroud)

因此,只有在上述两个标准模块的帮助下,您才能解析以前面提到的3种方式中的任何一种编写的数字:

try:
    num = float(num_str)
except ValueError:
    try:
        num = locale.atof(num_str)
    except ValueError:
        try:
            num = float(Fraction(num_str))
        except ValueError:
            raise Exception("Cannot parse '%s'" % num_str)  # Or handle '42 billion' here
# 'num' has the numerical value of 'num_str', here.        
Run Code Online (Sandbox Code Playgroud)